sql >> Base de Datos >  >> RDS >> Oracle

TO_CHAR de un tipo Oracle PL/SQL TABLE

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