Bạn không thể xác định loại bản ghi dựa trên REF CURSOR được nhập yếu. Vì loại con trỏ được xác định trong gói có thể được sử dụng để trả về dữ liệu từ một truy vấn tùy ý với các cột tùy ý, trình biên dịch PL / SQL không thể xác định loại bản ghi thích hợp để tìm nạp dữ liệu.
Nếu bạn biết dữ liệu thực tế đang được trả về từ hàm, bạn có thể khai báo một bản ghi thuộc loại đó để tìm nạp dữ liệu vào. Ví dụ:nếu tôi khai báo một hàm trả về loại con trỏ được gõ yếu nhưng tôi biết rằng con trỏ thực sự trả về một con trỏ dựa trên EMP
, tôi có thể tìm nạp dữ liệu vào EMP%ROWTYPE
ghi lại (lưu ý rằng SYS_REFCURSOR
là loại REF CURSOR được định kiểu yếu do hệ thống xác định)
create or replace function f1
return sys_refcursor
is
l_rc sys_refcursor;
begin
open l_rc
for select *
from emp;
return l_rc;
end;
declare
l_rc sys_refcursor;
l_emp emp%rowtype;
begin
l_rc := f1;
loop
fetch l_rc into l_emp;
exit when l_rc%notfound;
dbms_output.put_line( l_emp.empno );
end loop;
end;