sql >> Databasteknik >  >> RDS >> Oracle

TO_CHAR av en Oracle PL/SQL TABLE-typ

ok, ledsen att detta inte är komplett, men för att följa upp @Lukas, här är vad jag har hittills:

Först, istället för att försöka skapa valfri data/valfri typ, försökte jag använda XML extraherad från en markör... konstigt, men det är generiskt:

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

Nu, för att kalla det, behöver du en markör, så jag försökte casta till markören i pl/sql, något i stil med:

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

Men beroende på hur v_tab definieras, kan detta eller inte orsaka problem i pl/sql cast (att använda %rowtype i kapslad tabell def verkar ge problem).

Hur som helst, du kan bygga vidare på detta eller förfina det som du vill. (och eventuellt använd xmltable...)

Hoppas det hjälper




  1. Hur man byter namn på en MySQL-databas

  2. lista Postgres ENUM-typ

  3. 5 tips för att hålla din databas säker

  4. UNION ALL Optimering