カーソルの引数にwhere IN句の中身を渡したい。
896440Oct 27 2011 — edited Oct 31 2011お世話になっております。
掲題の通り、where句のINに使用する条件をvarchar2で定義して渡しているのですが、
期待通りの結果が得られません。
※期待している結果はprocess_def = 45のデータがselectされて欲しい。
特別な方法があるのでしょうか?
ご存知の方はご教授ください。
よろしくお願いします。
以下のようなコードを書きました。
<pre>
実行結果:
SQL> declare
2
3 cursor testcur( InuserId in varchar2, InprocessDef in varchar2 ) is
4 select activity_cd from test
5 where user_id = InuserId
6 and process_def in ( InprocessDef ) ;
7
8 processDef varchar2(3000) ;
9
10 begin
11 processDef := CHR(39) || 45 || CHR(39) || ',' || CHR(39) || 44 || CHR(39) ;
12 dbms_output.put_line('①' || processDef);
13
14 for i in testcur( 'S123456', processDef ) loop
15 dbms_output.put_line('②' || i.activity_cd);
16 end loop ;
17 return ;
18 end ;
19 /
①'45','44'
PL/SQLプロシージャが正常に完了しました。
テーブル定義:
SQL> desc test
名前 NULL? 型
----------------------------------------------- -------- --------------------------------
ACTIVITY_CD VARCHAR2(10)
PROCESS_DEF VARCHAR2(10)
USER_ID VARCHAR2(10)
データ内容:
SQL> select * from test ;
ACTIVITY_C PROCESS_DE USER_ID
---------- ---------- ----------
100 45 S123456
100 46 S123456
100 47 S123456
SQL>
</pre>