Intentaré una respuesta en lugar de otro comentario.
Como dije en un comentario, una declaración de selección pura/simple no funciona en PL/SQL. Pero me equivoqué al afirmar que necesita una función almacenada para devolver un cursor de referencia.
Pero lo primero es lo primero:el tipo "id_array" que declara en su bloque PL/SQL es un tipo PL/SQL. No se puede usar en una declaración de selección de cursor de referencia. En su lugar, necesitará un tipo de SQL:
create type id_array as table of number;
Esto debe ejecutarse solo una vez, como "crear tabla".
Su bloque PL/SQL podría verse así:
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;
PD:
Mientras armaba esta publicación, me di cuenta de dónde podría provenir el ORA-00942. La matriz t_ids se basó en un tipo PL/SQL, que no se conoce ni está disponible en el lado de SQL.