Вы не можете определить тип записи на основе слабо типизированного 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;