No puede definir un tipo de registro basado en un REF CURSOR de tipo débil. Dado que el tipo de cursor definido en el paquete se puede usar para devolver datos de una consulta arbitraria con columnas arbitrarias, el compilador PL/SQL no puede determinar un tipo de registro apropiado para recuperar los datos.
Si conoce los datos reales que devuelve la función, puede declarar un registro de ese tipo para recuperar los datos. Por ejemplo, si declaro una función que devuelve un tipo de cursor de tipo débil pero sé que el cursor realmente devuelve un cursor basado en el EMP
tabla, puedo obtener los datos en un EMP%ROWTYPE
registro (tenga en cuenta que SYS_REFCURSOR
es un tipo REF CURSOR débilmente tipado definido por el 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;