ok, omlouvám se, že to není kompletní, ale pro pokračování s @Lukasem je to, co zatím mám:
Za prvé, místo toho, abych se snažil vytvořit jakákoli data/anytype typy, zkusil jsem použít XML extrahovaný z kurzoru... divné, ale obecně:
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;
/
Abyste to mohli zavolat, potřebujete kurzor, takže jsem zkusil přetypovat na kurzor v pl/sql, něco jako:
open v_cur for select * from table(cast(v_tab as tab_type));
Ale v závislosti na tom, jak je definována v_tab, to může nebo nemusí způsobit problémy v přetypování pl/sql (zdá se, že použití %rowtype ve vnořené tabulce def způsobuje problémy).
Každopádně na tom můžete stavět nebo to vylepšovat, jak chcete. (a případně použít xmltable...)
Doufám, že to pomůže