Nie można zdefiniować typu rekordu na podstawie słabo określonego KURSORA REF. Ponieważ typ kursora zdefiniowany w pakiecie może zostać użyty do zwrócenia danych z dowolnego zapytania z dowolnymi kolumnami, kompilator PL/SQL nie może określić odpowiedniego typu rekordu, do którego dane mają zostać pobrane.
Jeśli znasz rzeczywiste dane zwracane z funkcji, możesz zadeklarować rekord tego typu, do którego będą pobierane dane. Na przykład, jeśli zadeklaruję funkcję, która zwraca słabo wpisany typ kursora, ale wiem, że kursor naprawdę zwraca kursor oparty na EMP
tabeli, mogę pobrać dane do EMP%ROWTYPE
rekord (zauważ, że SYS_REFCURSOR
jest zdefiniowanym przez system słabo typowanym typem 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;