добре, съжалявам, че това не е пълно, но за да последвам @Lukas, ето какво имам досега:
Първо, вместо да се опитвам да създам типове anydata/anytype, опитах да използвам 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 cast (използването на %rowtype във вложената таблица def изглежда създава проблеми).
Както и да е, можете да надградите това или да го прецизирате, както желаете. (и евентуално да използвате xmltable...)
Надявам се това да помогне