Proverò una risposta invece di un altro commento.
Come ho detto in un commento, un'istruzione select pura/semplice non funziona in PL/SQL. Ma ho sbagliato ad affermare che è necessaria una funzione memorizzata per restituire un cursore di riferimento.
Ma prima di tutto:il tipo "id_array" che dichiari nel tuo blocco PL/SQL è un tipo PL/SQL. Non può essere utilizzato in un'istruzione di selezione del cursore di riferimento. Invece avrai bisogno di un tipo SQL:
create type id_array as table of number;
Questo deve essere eseguito solo una volta, proprio come una "crea tabella".
Il tuo blocco PL/SQL potrebbe quindi assomigliare a questo:
DECLARE
t_ids id_array;
BEGIN
UPDATE WorkerStatus
SET
StateId = :StateId
,StateReasonId = :StateReasonId
WHERE
StateId = :CurrentStateId
RETURNING Id BULK COLLECT INTO t_Ids;
OPEN :rcursor FOR SELECT * FROM TABLE(cast(t_Ids as id_array));
END;
PS:
Durante l'assemblaggio di questo post, mi sono reso conto da dove potrebbe provenire l'ORA-00942. L'array t_ids era basato su un tipo PL/SQL, che non è noto/disponibile sul lato SQL.