Sie können keinen Datensatztyp basierend auf einem schwach typisierten REF CURSOR definieren. Da der im Paket definierte Cursortyp verwendet werden kann, um Daten aus einer beliebigen Abfrage mit beliebigen Spalten zurückzugeben, kann der PL/SQL-Compiler keinen geeigneten Datensatztyp zum Abrufen der Daten ermitteln.
Wenn Sie die tatsächlichen Daten kennen, die von der Funktion zurückgegeben werden, können Sie einen Datensatz dieses Typs deklarieren, in den die Daten abgerufen werden. Wenn ich zum Beispiel eine Funktion deklariere, die einen schwach typisierten Cursortyp zurückgibt, aber ich weiß, dass der Cursor wirklich einen Cursor zurückgibt, der auf dem EMP
basiert Tabelle kann ich die Daten in einen EMP%ROWTYPE
holen Datensatz (beachten Sie, dass SYS_REFCURSOR
ist ein vom System definierter schwach typisierter 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;