Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

TO_CHAR de um tipo Oracle PL/SQL TABLE


ok, desculpe, isso não está completo, mas para acompanhar @Lukas, aqui está o que eu tenho até agora:

Primeiro, em vez de tentar criar tipos anydata/anytype, tentei usar XML extraído de um cursor ... estranho, mas é 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;
/

Agora, para chamá-lo, você precisa de um cursor, então tentei converter para cursor em pl/sql, algo como:
open v_cur for select * from table(cast(v_tab as tab_type));

Mas dependendo de como v_tab é definido, isso pode ou não causar problemas no pl/sql cast (usar %rowtype na def de tabela aninhada parece causar problemas).

De qualquer forma, você pode construir sobre isso ou refiná-lo como quiser. (e possivelmente usar xmltable ...)

espero que ajude