ど忘れSEの備忘録

日々集めた何かしらを残すための何か。 共有とか疑問解決とかできたらいいな。 iPhoneとかiOSとかその他スクリプトとか色々。

【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して実行する必要があると。
まぁ確認用に実行する時って''で連結して出すから気付きにくいわなぁっていうお話。