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

参照カーソルを返すOracleプロシージャから、どのようにして適切にフォーマットされた結果を取得しますか?

    GetQuestionsの場合 はrefcursorを返す関数であり、SQL Serverバージョンにあるように見えますが、次のようなことができる場合があります。

    select * from table(MyPackage.GetQuestions('OMG Ponies'));
    

    または、PL / SQLブロックで必要な場合は、同じselectをカーソルで使用できます。

    関数にdbms_outputを生成させることもできます 代わりにステートメントを使用して、デバッグに常に使用できるようにしますが、少しオーバーヘッドが追加されます。

    編集

    うーん、cast()が可能かどうかわからない パッケージの外部で独自のタイプ(およびそのタイプのテーブル)を宣言する場合を除いて、使用可能なタイプに返されたrefcursor。ただし、結果をダンプするためだけにこれを行うことができます:

    create package mypackage as
        function getquestions(user in varchar2) return sys_refcursor;
    end mypackage;
    /
    
    create package body mypackage as
        function getquestions(user in varchar2) return sys_refcursor as
            r sys_refcursor;
        begin
            open r for
                /* Whatever your real query is */
                select 'Row 1' col1, 'Value 1' col2 from dual
                union
                select 'Row 2', 'Value 2' from dual
                union
                select 'Row 3', 'Value 3' from dual;
                return r;
        end;
    end mypackage;
    /
    
    var r refcursor;
    exec :r := mypackage.getquestions('OMG Ponies');
    print r;
    

    また、呼び出しの結果を別のプロシージャまたは関数で使用できます。 PL / SQLの外部に到達しているだけで、少し注意が必要なようです。

    編集して追加: このアプローチでは、それが手順である場合、基本的に同じことを行うことができます:

    var r refcursor;
    exec mypackage.getquestions(:r, 'OMG Ponies');
    print r;
    


    1. 2つの異なるwhere句を持つ2つのデータセットを返す必要があります

    2. PHPでPostgreSQLに接続できないpg_connect()

    3. Hibernateネイティブクエリ-char(3)列

    4. MSSQLデータベーステーブルから最も近い経度と緯度を取得しますか?