Dường như bạn nhầm lẫn với các con trỏ rõ ràng, ví dụ:
declare
cursor cur is
select dummy from dual;
begin
for rec in cur
loop
dbms_output.put_line(rec.dummy);
end loop;
end;
/
với một con trỏ tham chiếu - là một con trỏ tới một con trỏ đang mở.
Thông thường, bạn sẽ sử dụng con trỏ tham chiếu để mở một con trỏ trong db và chuyển nó trở lại ứng dụng gọi điện để nó lặp qua.
Cách bạn đã khai báo các con trỏ tham chiếu là tham số ngoài và sau đó cố gắng lặp lại chúng theo cùng một quy trình không có ý nghĩa gì - khi bạn đã tìm nạp một bản ghi từ con trỏ, bạn không thể tìm nạp lại nó.
Nếu bạn hoàn toàn phải lặp qua con trỏ tham chiếu, bạn sẽ sử dụng loại cú pháp sau:
declare
cur sys_refcursor;
rec dual%rowtype;
begin
open cur for select dummy from dual;
loop
fetch cur into rec;
exit when cur%notfound;
dbms_output.put_line(rec.dummy);
end loop;
end;
/
nhưng như tôi đã nói, nói chung, bạn sẽ không lặp lại các con trỏ tham chiếu trong db, bạn sẽ làm điều đó trong mã gọi điện.
Có lẽ nếu bạn cập nhật câu hỏi của mình với các yêu cầu mà bạn đang cố gắng đáp ứng, chúng tôi có thể đề xuất một cách tốt hơn để thực hiện điều đó.