Jag kommer att försöka ett svar istället för en annan kommentar.
Som jag sa i en kommentar, en ren/enkel select-sats fungerar inte i PL/SQL. Men jag hade fel när jag påstod att du behöver en lagrad funktion för att returnera en ref-markör.
Men först saker först:Typen "id_array" du deklarerar i ditt PL/SQL-block är en PL/SQL-typ. Det kan inte användas i en ref cursor select-sats. Istället behöver du en SQL-typ:
create type id_array as table of number;
Detta behöver endast utföras en gång, precis som en "skapa tabell".
Ditt PL/SQL-block kan då se ut så här:
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:
När jag satte ihop det här inlägget insåg jag var ORA-00942 kan komma ifrån. Arrayen t_ids baserades på en PL/SQL-typ, som inte är känd/tillgänglig på SQL-sidan.