Non è possibile definire un tipo di record basato su un REF CURSOR con tipizzazione debole. Poiché il tipo di cursore definito nel pacchetto può essere utilizzato per restituire dati da una query arbitraria con colonne arbitrarie, il compilatore PL/SQL non può determinare un tipo di record appropriato in cui recuperare i dati.
Se si conoscono i dati effettivi restituiti dalla funzione, è possibile dichiarare un record di quel tipo in cui recuperare i dati. Ad esempio, se dichiaro una funzione che restituisce un tipo di cursore debolmente digitato ma so che il cursore restituisce davvero un cursore basato su EMP
tabella, posso recuperare i dati in un EMP%ROWTYPE
record (notare che SYS_REFCURSOR
è un tipo REF CURSOR debolmente tipizzato definito dal sistema)
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;