sql >> Databáze >  >> RDS >> Oracle

TO_CHAR typu Oracle PL/SQL TABLE

ok, omlouvám se, že to není kompletní, ale pro pokračování s @Lukasem je to, co zatím mám:

Za prvé, místo toho, abych se snažil vytvořit jakákoli data/anytype typy, zkusil jsem použít XML extrahovaný z kurzoru... divné, ale obecně:

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

Abyste to mohli zavolat, potřebujete kurzor, takže jsem zkusil přetypovat na kurzor v pl/sql, něco jako:

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

Ale v závislosti na tom, jak je definována v_tab, to může nebo nemusí způsobit problémy v přetypování pl/sql (zdá se, že použití %rowtype ve vnořené tabulce def způsobuje problémy).

Každopádně na tom můžete stavět nebo to vylepšovat, jak chcete. (a případně použít xmltable...)

Doufám, že to pomůže




  1. Jak přidat počet dní v postgresql datetime

  2. Jak objednávat podle názvu měsíce v SQLite

  3. Syntaxe SQL TRUNCATE – uvedena v DBMS

  4. SQLite JSON_ARRAY_LENGTH()