CREATE OR REPLACE TYPE VARCHAR2_ARRAY IS TABLE OF VARCHAR2(100);/
CREATE OR REPLACE PROCEDURE "TEST_PROCEDURE" ( result OUT SYS_REFCURSOR, state IN VARCHAR2_ARRAY ) is BEGIN --SELECT文 OPEN result FOR SELECT * FROM TEST_TABLE WHERE STATE IN( state ) ; --IN句の条件を引数より取得したい END; /
めびさんの言う動的にってのは、javaで言うstringbuilderみたいなイメージですよ。
確かPL/SQLでも変数に文字列を追加する形で
変数 sqlString = select a, b, c from myTable where a in (
if(パラメタがあったら) then
sqlString =+ 条件に追加
〜略〜
sqlString = );
sqlString.実行
みたいに出来た(昔現場で書いた)記憶があります。
あ〜、でもあの時はinじゃなくてandだったかなぁ。
実際にPL/SQLでやると以下のような感じになるかと
環境が無く思いつくままに書いたのでこのまま動くか分かりませんが;
--------------------------
CREATE OR REPLACE PROCEDURE "TEST_PROCEDURE" (
result OUT SYS_REFCURSOR,
state IN VARCHAR2_ARRAY
) IS
stmt VARCHAR2(1000);
BEGIN
stmt := 'SELECT * FROM TEST TABLE WHERE STATE IN(';
-- ループにてIN句を作成する
FOR i IN 1..state.COUNT LOOP
stmt := stmt || '''' || state(i) || '''';
IF state.EXISTS(i+1) THEN
stmt := stmt || ',';
END IF;
END LOOP;
stmt := stmt || ')';