Du kan ikke definere en posttype baseret på en svagt indtastet REF CURSOR. Da markørtypen, der er defineret i pakken, kan bruges til at returnere data fra en vilkårlig forespørgsel med vilkårlige kolonner, kan PL/SQL-kompileren ikke bestemme en passende posttype at hente dataene ind i.
Hvis du kender de faktiske data, der returneres fra funktionen, kan du erklære en post af den type for at hente dataene ind. For eksempel, hvis jeg erklærer en funktion, der returnerer en svagt skrevet markørtype, men jeg ved, at markøren virkelig returnerer en markør baseret på EMP
tabel, kan jeg hente dataene ind i en EMP%ROWTYPE
post (bemærk at SYS_REFCURSOR
er en systemdefineret REF CURSOR-type, der er svagt skrevet)
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;