Je vais essayer une réponse au lieu d'un autre commentaire.
Comme je l'ai dit dans un commentaire, une instruction select pure/simple ne fonctionne pas en PL/SQL. Mais j'ai eu tort de dire que vous avez besoin d'une fonction stockée pour renvoyer un curseur de référence.
Mais tout d'abord :le type "id_array" que vous déclarez dans votre bloc PL/SQL est un type PL/SQL. Il ne peut pas être utilisé dans une instruction de sélection de curseur de référence. Au lieu de cela, vous aurez besoin d'un type SQL :
create type id_array as table of number;
Cela ne doit être exécuté qu'une seule fois, tout comme une "création de table".
Votre bloc PL/SQL pourrait alors ressembler à ceci :
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 :
En assemblant ce post, j'ai réalisé d'où pouvait provenir l'ORA-00942. Le tableau t_ids était basé sur un type PL/SQL, qui n'est pas connu/disponible côté SQL.