Anda tidak dapat menentukan jenis rekaman berdasarkan KURSOR REF yang diketik dengan lemah. Karena jenis kursor yang ditentukan dalam paket dapat digunakan untuk mengembalikan data dari kueri arbitrer dengan kolom arbitrer, kompiler PL/SQL tidak dapat menentukan jenis catatan yang sesuai untuk mengambil data.
Jika Anda mengetahui data aktual yang dikembalikan dari fungsi tersebut, Anda dapat mendeklarasikan catatan jenis tersebut untuk mengambil data. Misalnya, jika saya mendeklarasikan fungsi yang mengembalikan tipe kursor yang diketik dengan lemah tetapi saya tahu bahwa kursor benar-benar mengembalikan kursor berdasarkan EMP
tabel, saya dapat mengambil data ke dalam EMP%ROWTYPE
record (perhatikan bahwa SYS_REFCURSOR
adalah tipe REF CURSOR tipe lemah yang ditentukan sistem)
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;