Vous ne pouvez pas définir un type d'enregistrement basé sur un REF CURSOR faiblement typé. Étant donné que le type de curseur défini dans le package peut être utilisé pour renvoyer des données à partir d'une requête arbitraire avec des colonnes arbitraires, le compilateur PL/SQL ne peut pas déterminer un type d'enregistrement approprié dans lequel extraire les données.
Si vous connaissez les données réelles renvoyées par la fonction, vous pouvez déclarer un enregistrement de ce type dans lequel extraire les données. Par exemple, si je déclare une fonction qui renvoie un type de curseur faiblement typé mais que je sais que le curseur renvoie réellement un curseur basé sur le EMP
table, je peux récupérer les données dans un EMP%ROWTYPE
record (notez que SYS_REFCURSOR
est un type REF CURSOR faiblement typé défini par le système)
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;