sql >> Database >  >> RDS >> Oracle

TO_CHAR van een Oracle PL/SQL TABLE-type

ok, sorry, dit is niet compleet, maar om op te volgen met @Lukas, dit is wat ik tot nu toe heb:

Ten eerste, in plaats van te proberen om het even welke data/anytype-types te creëren, probeerde ik XML te gebruiken die was geëxtraheerd uit een cursor... raar, maar het is generiek:

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

Om het nu te noemen, heb je een cursor nodig, dus ik probeerde naar de cursor te casten in pl/sql, zoiets als:

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

Maar afhankelijk van hoe v_tab is gedefinieerd, kan dit al dan niet problemen veroorzaken in pl/sql cast (het gebruik van %rowtype in geneste tabeldef lijkt problemen te geven).

Hoe dan ook, je kunt hierop voortbouwen of verfijnen zoals je wilt. (en eventueel xmltable gebruiken...)

Ik hoop dat dat helpt




  1. Opgeslagen procedure uitvoeren in MySQL Workbench

  2. SQLite-opdrachten

  3. LIKE gebruiken in bindParam voor een MySQL PDO-query

  4. Trends in 2020 waar DBA's zich bewust van moeten zijn