Ich werde versuchen, eine Antwort anstelle eines weiteren Kommentars zu geben.
Wie ich in einem Kommentar sagte, funktioniert eine reine/einfache Select-Anweisung in PL/SQL nicht. Aber ich habe mich geirrt, als ich sagte, dass Sie eine gespeicherte Funktion brauchen, um einen Ref-Cursor zurückzugeben.
Aber der Reihe nach:Der Typ "id_array", den Sie in Ihrem PL/SQL-Block deklarieren, ist ein PL/SQL-Typ. Es kann nicht in einer ref-Cursor-Select-Anweisung verwendet werden. Stattdessen benötigen Sie einen SQL-Typ:
create type id_array as table of number;
Dies muss nur einmal ausgeführt werden, genau wie ein "Tabelle erstellen".
Ihr PL/SQL-Block könnte dann so aussehen:
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:
Beim Zusammenstellen dieses Posts wurde mir klar, woher der ORA-00942 kommen könnte. Das Array t_ids basierte auf einem PL/SQL-Typ, der auf der SQL-Seite nicht bekannt/verfügbar ist.