If u going to use SELECT ... FOR UPDATE u have to undestand, that
Oracle implement TX (SHARED ROW) lock for each row in rowset.
Oracle use ROWID as pointer for row.
If u use DISTINCT that rows can't have ROWID as pointer of a row in a resultset.

because below, when u write:

UPDATE ... WHERE CURRENT OF ccc;

Oracle "convert" this statment to:

UPDATE ... WHERE rowid = ccc.rowid;

This is reason why u can't use DISTINCT with FOR UPDATE OF ...;