хорошо, извините, это не завершено, но для продолжения работы с @Lukas вот что у меня есть:
Во-первых, вместо того, чтобы пытаться создавать любые типы данных / типов, я попытался использовать XML, извлеченный из курсора ... странно, но его обобщенно:
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;
/
Теперь, чтобы вызвать его, вам нужен курсор, поэтому я попытался привести к курсору в pl / sql, что-то вроде:
open v_cur for select * from table(cast(v_tab as tab_type));
Но в зависимости от того, как определен v_tab, это может вызывать или не вызывать проблемы при приведении pl / sql (использование% rowtype в определении вложенной таблицы может вызвать проблемы).
В любом случае, вы можете развить это или уточнить, как вам нравится. (и, возможно, использовать xmltable ...)
Надеюсь, это поможет