[ Oracle PL/SQL ] パラメータつきのカーソルを使用する

Pocket

パラメータつきののカーソルを使用するサンプルコードになります。あるクエリで取得した結果ごとに別のクエリを発行して結果を取得したい場合などに使用できます。複数件のレコードを返す SQL を関数(変数)のように記述することでソースコードもすっきりとしますので、有用かと思います。

スポンサーリンク
/*
 * パラメータつきのカーソルの使用例
 */
CREATE OR REPLACE FUNCTION TestFunction RETURN NUMBER
IS
    -- パラメータつきカーソル定義
    cursor cParamTest(param IN VARCHAR2) IS
              select
                 TEST_ID,
                 TEST_NAME
              from 
                 tbl_test
              where 0=0
                 and COND = param; -- where句の条件にパラメータを設定する
BEGIN

    -- カーソルにパラメータを渡して結果を1行ずつ取得する
    FOR rcd IN cParamTest('あいうえお') LOOP

        /*
         * 取得した結果を表示する
         * .(ドット)でカラム名を指定すれば良いだけである
         */
        dbms_output.put_line(rcd.TEST_ID);
        dbms_output.put_line(rcd.TEST_NAME);

    END LOOP;

    return 0;
END;
/

さらに、カーソル内では、カーソルで定義したパラメータのみが使用できるわけではありません。関数(この場合は TestFunction)に渡されるパラメータもカーソルで利用することができます。

CREATE OR REPLACE FUNCTION TestFunction(funcParam IN VARCHAR2) RETURN NUMBER
IS
    -- パラメータつきカーソル定義
    cursor cParamTest(cursorParam IN VARCHAR2) IS
                select
                   TEST_ID,
                   TEST_NAME
                from 
                   tbl_test
                where 0=0
                   and COND1 = funcParam -- where句の条件に関数パラメータを設定する
                   and COND2 = cursorParam; -- where句の条件にカーソルパラメータを設定する
BEGIN

 /*
  * 以下、省略
  */

 

スポンサーリンク

Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>