ok, lo siento, esto no está completo, pero para dar seguimiento a @Lukas, esto es lo que tengo hasta ahora:
Primero, en lugar de intentar crear cualquier tipo de datos/cualquier tipo, intenté usar XML extraído de un cursor... raro, pero es genérico:
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;
/
Ahora, para llamarlo, necesitas un cursor, así que intenté convertirlo en cursor en pl/sql, algo como:
open v_cur for select * from table(cast(v_tab as tab_type));
Pero dependiendo de cómo se defina v_tab, esto puede o no causar problemas en pl/sql cast (el uso de %rowtype en la definición de tabla anidada parece dar problemas).
De todos modos, puedes construir sobre esto o refinarlo como quieras. (y posiblemente use xmltable...)
Espero que ayude