sql >> データベース >  >> RDS >> Oracle

Oracle PL /SQLTABLEタイプのTO_CHAR

    申し訳ありませんが、これは完了していませんが、@ Lukasのフォローアップのために、これまでのところ次のようにしています:

    まず、anydata / anytypeタイプを作成する代わりに、カーソルから抽出されたXMLを使用してみました...奇妙ですが、その一般的なもの:

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

    これを呼び出すにはカーソルが必要なので、pl/sqlでカーソルにキャストしてみました。次のようになります。

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

    ただし、v_tabの定義方法によっては、pl / sqlキャストで問題が発生する場合と発生しない場合があります(ネストされた表defで%rowtypeを使用すると問題が発生するようです)。

    とにかく、これに基づいて構築することも、好きなように改良することもできます。 (そしておそらくxmltableを使用します...)

    お役に立てば幸いです




    1. SQLite Sum()のしくみ

    2. PostgreSQLデータベース内のサイズ(相対および絶対)のスキーマのリスト

    3. ループのないセットまたはシーケンスを生成する–パート2

    4. JavaScriptプロキシを使用してSQLiteでブール値を処理する方法