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

ストアド関数またはプロシージャを使用せずに、C#ODP.NETのOracle参照カーソルをReturnValueパラメータとして使用するにはどうすればよいですか?

    別のコメントの代わりに答えを試します。

    あるコメントで述べたように、純粋/単純なselectステートメントはPL/SQLでは機能しません。しかし、refカーソルを返すにはストアド関数が必要だと言ったのは間違っていました。

    ただし、まず最初に、PL/SQLブロックで宣言するタイプ「id_array」はPL/SQLタイプです。 refカーソルselectステートメントでは使用できません。代わりに、SQLタイプが必要になります:

    create type id_array as table of number;
    

    これは、「テーブルの作成」と同じように、一度だけ実行する必要があります。

    PL/SQLブロックは次のようになります。

    DECLARE
        t_ids   id_array;
    BEGIN
        UPDATE WorkerStatus
        SET
             StateId = :StateId
            ,StateReasonId = :StateReasonId
        WHERE
            StateId = :CurrentStateId
        RETURNING Id BULK COLLECT INTO t_Ids;
    
        OPEN :rcursor FOR SELECT * FROM TABLE(cast(t_Ids as id_array));    
    END;
    

    PS:
    この投稿を組み立てているときに、ORA-00942がどこから来たのかを理解しました。配列t_idsはPL/SQLタイプに基づいていましたが、SQL側では不明/使用可能ではありません。




    1. PLSQLでEXISTS条件が機能しない場合

    2. PostgreSql'PDOException'メッセージ'がドライバーを見つけられませんでした'

    3. 結合フィールドでコンマ区切りリストを使用して2つのテーブルを結合する方法

    4. postgresのクラスター化インデックスについて