Oracle
 sql >> Datenbank >  >> RDS >> Oracle

TO_CHAR eines Oracle PL/SQL TABLE-Typs

ok, tut mir leid, das ist nicht vollständig, aber um mit @Lukas nachzufassen, hier ist, was ich bisher habe:

Anstatt zu versuchen, Anydata/Anytype-Typen zu erstellen, habe ich zuerst versucht, XML zu verwenden, das aus einem Cursor extrahiert wurde ... seltsam, aber es ist generisch:

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

Nun, um es aufzurufen, benötigen Sie einen Cursor, also habe ich versucht, in pl/sql in einen Cursor umzuwandeln, etwa so:

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

Aber je nachdem, wie v_tab definiert ist, kann dies Probleme bei der pl/sql-Umwandlung verursachen oder auch nicht (die Verwendung von %rowtype in der verschachtelten Tabellendefinition scheint Probleme zu geben).

Wie auch immer, Sie können darauf aufbauen oder es nach Belieben verfeinern. (und eventuell xmltable verwenden...)

Hoffe das hilft