ok, maaf ini tidak lengkap, tetapi untuk menindaklanjuti dengan @Lukas, inilah yang saya miliki sejauh ini:
Pertama, alih-alih mencoba membuat tipe data/apa saja, saya mencoba menggunakan XML yang diekstrak dari kursor...aneh, tapi generiknya:
CREATE OR REPLACE procedure printCur(in_cursor IN sys_refcursor) IS
begin
FOR c IN (SELECT ROWNUM rn,
t2.COLUMN_VALUE.getrootelement () NAME,
EXTRACTVALUE (t2.COLUMN_VALUE, 'node()') VALUE
FROM TABLE (XMLSEQUENCE (in_cursor)) t,
TABLE (XMLSEQUENCE (EXTRACT (COLUMN_VALUE, '/ROW/node()'))) t2
order by 1)
LOOP
DBMS_OUTPUT.put_line (c.NAME || ': ' || c.VALUE);
END LOOP;
exception
when others then raise;
end;
/
Sekarang, untuk menyebutnya, Anda memerlukan kursor, jadi saya mencoba melakukan casting ke kursor di pl/sql, seperti:
open v_cur for select * from table(cast(v_tab as tab_type));
Tetapi tergantung pada bagaimana v_tab didefinisikan, ini mungkin atau mungkin tidak menyebabkan masalah dalam pl/sql cast (menggunakan %rowtype di tabel bersarang def tampaknya memberikan masalah).
Bagaimanapun, Anda dapat membangun ini atau memperbaikinya sesuka Anda. (dan mungkin menggunakan xmltable...)
Semoga membantu