Tôi sẽ thử một câu trả lời thay vì một nhận xét khác.
Như tôi đã nói trong một nhận xét, một câu lệnh chọn thuần túy / đơn giản không hoạt động trong PL / SQL. Nhưng tôi đã sai khi nói rằng bạn cần một hàm được lưu trữ để trả về con trỏ tham chiếu.
Nhưng điều đầu tiên trước tiên:Loại "id_array" mà bạn khai báo trong khối PL / SQL của mình là kiểu PL / SQL. Nó không thể được sử dụng trong câu lệnh chọn con trỏ tham chiếu. Thay vào đó, bạn sẽ cần một kiểu SQL:
create type id_array as table of number;
Thao tác này chỉ cần được thực hiện một lần, giống như "tạo bảng".
Khối PL / SQL của bạn sau đó có thể trông giống như sau:
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;
Tái bút:
Trong khi tập hợp bài đăng này, tôi nhận ra ORA-00942 có thể đến từ đâu. Mảng t_ids dựa trên kiểu PL / SQL, kiểu này không được biết / có sẵn ở phía SQL.