Oracle
 sql >> Base de données >  >> RDS >> Oracle

TO_CHAR d'un type Oracle PL/SQL TABLE

ok, désolé ce n'est pas complet, mais pour faire un suivi avec @Lukas, voici ce que j'ai jusqu'à présent :

Tout d'abord, au lieu d'essayer de créer des types anydata/anytype, j'ai essayé d'utiliser XML extrait d'un curseur... bizarre, mais c'est générique :

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;
/

Maintenant, pour l'appeler, vous avez besoin d'un curseur, j'ai donc essayé de lancer le curseur en pl/sql, quelque chose comme :

open v_cur for select * from table(cast(v_tab as tab_type));

Mais selon la façon dont v_tab est défini, cela peut ou non causer des problèmes dans la distribution pl/sql (l'utilisation de %rowtype dans la définition de table imbriquée semble poser des problèmes).

Quoi qu'il en soit, vous pouvez vous en servir ou l'affiner à votre guise. (et éventuellement utiliser xmltable...)

J'espère que ça aide