Saya akan mencoba jawaban alih-alih komentar lain.
Seperti yang saya katakan dalam satu komentar, pernyataan pilih murni/sederhana tidak berfungsi di PL/SQL. Tapi saya salah dalam menyatakan, bahwa Anda memerlukan fungsi tersimpan untuk mengembalikan kursor ref.
Tetapi hal pertama yang pertama:Jenis "id_array" yang Anda nyatakan di blok PL/SQL Anda adalah jenis PL/SQL. Itu tidak dapat digunakan dalam pernyataan pilih kursor ref. Sebagai gantinya, Anda memerlukan tipe SQL:
create type id_array as table of number;
Ini perlu dijalankan hanya sekali, seperti "buat tabel".
Blok PL/SQL Anda akan terlihat seperti ini:
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:
Saat merakit posting ini, saya menyadari dari mana asalnya ORA-00942. Array t_ids didasarkan pada tipe PL/SQL, yang tidak diketahui/tersedia di sisi SQL.