Du kan inte definiera en posttyp baserat på en svagt skriven REF CURSOR. Eftersom markörtypen som definieras i paketet kan användas för att returnera data från en godtycklig fråga med godtyckliga kolumner, kan PL/SQL-kompilatorn inte bestämma en lämplig posttyp att hämta data till.
Om du känner till de faktiska data som returneras från funktionen kan du deklarera en post av den typen för att hämta data till. Till exempel, om jag deklarerar en funktion som returnerar en svagt skriven markörtyp men jag vet att markören verkligen returnerar en markör baserat på EMP
tabell kan jag hämta data till en EMP%ROWTYPE
post (observera att SYS_REFCURSOR
är en systemdefinierad REF CURSOR-typ med svagt typ)
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;