Jeg vil prøve et svar i stedet for en anden kommentar.
Som jeg sagde i en kommentar, virker en ren/simpel select-sætning ikke i PL/SQL. Men jeg tog fejl, da jeg sagde, at du har brug for en gemt funktion for at returnere en ref-markør.
Men først ting først:Typen "id_array" du erklærer i din PL/SQL-blok er en PL/SQL-type. Det kan ikke bruges i en ref cursor select-sætning. I stedet skal du bruge en SQL-type:
create type id_array as table of number;
Dette skal kun udføres én gang, ligesom en "opret tabel".
Din PL/SQL-blok kunne så se sådan ud:
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:
Mens jeg samlede dette indlæg, indså jeg, hvor ORA-00942 kunne komme fra. Arrayet t_ids var baseret på en PL/SQL-type, som ikke er kendt/tilgængelig på SQL-siden.