U kunt geen recordtype definiëren op basis van een zwak getypte REF-CURSOR. Aangezien het cursortype dat in het pakket is gedefinieerd, kan worden gebruikt om gegevens van een willekeurige query met willekeurige kolommen te retourneren, kan de PL/SQL-compiler geen geschikt recordtype bepalen om de gegevens in op te halen.
Als u de feitelijke gegevens weet die door de functie worden geretourneerd, kunt u een record van dat type declareren om de gegevens in op te halen. Als ik bijvoorbeeld een functie declareer die een zwak getypt cursortype retourneert, maar ik weet dat de cursor echt een cursor retourneert op basis van de EMP
tabel, kan ik de gegevens ophalen in een EMP%ROWTYPE
record (merk op dat SYS_REFCURSOR
is een door het systeem gedefinieerd zwak getypt REF CURSOR-type)
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;