Oracle
 sql >> Database >  >> RDS >> Oracle

TO_CHAR di un tipo Oracle PL/SQL TABLE

ok, mi dispiace che non sia completo, ma per dare seguito a @Lukas, ecco cosa ho finora:

Innanzitutto, invece di provare a creare qualsiasi tipo di dati/qualsiasi tipo, ho provato a utilizzare XML estratto da un cursore... strano, ma generico:

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

Ora, per chiamarlo, hai bisogno di un cursore, quindi ho provato a trasmettere al cursore in pl/sql, qualcosa del tipo:

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

Ma a seconda di come è definito v_tab, questo può o meno causare problemi nel cast pl/sql (l'uso di %rowtype nella definizione della tabella nidificata sembra dare problemi).

Ad ogni modo, puoi basarti su questo o perfezionarlo a tuo piacimento. (ed eventualmente utilizzare xmltable...)

Spero di esserti stato d'aiuto