Не можете да дефинирате тип запис въз основа на слабо въведен REF CURSOR. Тъй като типът курсор, дефиниран в пакета, може да се използва за връщане на данни от произволна заявка с произволни колони, PL/SQL компилаторът не може да определи подходящ тип запис, в който да извлече данните.
Ако знаете действителните данни, върнати от функцията, можете да декларирате запис от този тип, в който да извлечете данните. Например, ако декларирам функция, която връща слабо въведен тип курсор, но знам, че курсорът наистина връща курсор въз основа на EMP
таблица, мога да извлека данните в EMP%ROWTYPE
запис (обърнете внимание, че SYS_REFCURSOR
е дефиниран от системата слабо типизиран тип REF CURSOR)
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;