【Oracle】PL/SQLでのIN句複数指定
後輩君がハマってたので折角だから書いておこうかと。
SQL組んだんだけどデータが取れないらしく、どこがダメですかねとのお問合せ。
見ると画面で入力したチェックBOXのコード値をPL/SQLに渡して処理したいとのこと。
PLはこんな感じ。
select * from table where c1 in (p_type)
この「p_type」が複数だと効かないってとこまでは判明している模様。
そりゃ無理だ。
どうやらこの変数に「'AAA','BBB','CCC'」って文字列を渡してたっぽいんだけど、INは項目毎に変数作って値ぶちこんであげないとダメなんですねぇ。
なので、正解としては
where c1 in (p_type_a, p_type_b, p_type_c)
みたいなパラメータにするか、EXECUTE IMMEDIATE とかでSQL文字列作って上記のようなSQLをappendして実行する必要があると。
まぁ確認用に実行する時って''で連結して出すから気付きにくいわなぁっていうお話。