được rồi, xin lỗi vì cái này chưa hoàn thành, nhưng để theo dõi với @Lukas, đây là những gì tôi có cho đến nay:
Đầu tiên, thay vì cố gắng tạo các kiểu anydata / anytype, tôi đã thử sử dụng XML được trích xuất từ một con trỏ ... kỳ lạ, nhưng chung chung của nó:
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;
/
Bây giờ, để gọi nó, bạn cần một con trỏ, vì vậy tôi đã thử truyền sang con trỏ trong pl / sql, đại loại như:
open v_cur for select * from table(cast(v_tab as tab_type));
Nhưng tùy thuộc vào cách v_tab được định nghĩa, điều này có thể gây ra hoặc có thể không gây ra vấn đề trong ép kiểu pl / sql (sử dụng% rowtype trong def bảng lồng nhau dường như gây ra vấn đề).
Dù sao, bạn có thể xây dựng trên cái này hoặc tinh chỉnh nó theo ý muốn. (và có thể sử dụng xmltable ...)
Hy vọng điều đó sẽ giúp