Nemůžete definovat typ záznamu na základě slabého typu REF CURSOR. Vzhledem k tomu, že typ kurzoru definovaný v balíčku lze použít k vrácení dat z libovolného dotazu s libovolnými sloupci, kompilátor PL/SQL nemůže určit vhodný typ záznamu, do kterého by se data načetla.
Pokud znáte skutečná data vracená z funkce, můžete deklarovat záznam tohoto typu, do kterého se data načítají. Pokud například deklaruji funkci, která vrací slabě napsaný typ kurzoru, ale vím, že kurzor skutečně vrací kurzor na základě EMP
tabulky, mohu načíst data do EMP%ROWTYPE
záznam (všimněte si, že SYS_REFCURSOR
je systémově definovaný slabě typový REF CURSOR 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;