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

TO_CHAR af en Oracle PL/SQL TABLE-type

ok, beklager, at dette ikke er komplet, men for at følge op med @Lukas, her er hvad jeg har indtil videre:

For det første, i stedet for at forsøge at oprette nogen data/anytype-typer, prøvede jeg at bruge XML udtrukket fra en markør...underligt, men det er generisk:

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, for at kalde det, har du brug for en markør, så jeg prøvede at caste til markøren i pl/sql, noget som:

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

Men afhængigt af hvordan v_tab er defineret, kan dette muligvis forårsage problemer i pl/sql cast (brug af %rowtype i indlejret tabel ser ud til at give problemer).

I hvert fald kan du bygge videre på dette eller forfine det, som du vil. (og brug evt. xmltable...)

Håber det hjælper




  1. Indsæt et tidsstempel i databasen via ContentValues

  2. Hvad er et simpelt kommandolinjeprogram eller script til backup af SQL-serverdatabaser?

  3. Sådan sammenlignes null-værdier i MySQL

  4. Hvilke ressourcer findes der til justering af databasens ydeevne?