パラメータつきののカーソルを使用するサンプルコードになります。あるクエリで取得した結果ごとに別のクエリを発行して結果を取得したい場合などに使用できます。複数件のレコードを返す 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
/*
* 以下、省略
*/