• ベストアンサー

ストアドプロシージャーの引数をSELECT文のINに使うには

店舗コードを引数で受け取り、店舗名称を複数返すストアドプロシージャーを作成中です。 CURSOR c_StoreName (MchrCd IN VARCHAR2) IS Select 店舗略称 AS 店名 From 店舗マスタ  Where 店舗コード IN NVL(MchrCd,店舗コード) 引数の店舗コードは、複数可能としています。 よって、MchrCd は、下記のパターンで試してみましたが、うまくSelectできない場合があります。 どのように、SQLをかいたらよいか教えてください。 結果は以下のとおりです。 1).1店舗のとき   001   → OK 2).1店舗のとき   '001'    → NG 3).2店舗以上のとき 001,002    → NG 4).店舗コードなし  ''   → OK

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

テーブル上の店舗コードがVARCHAR2(3)なのでしょうか? 最も簡素な解決は、 where MchrCd like '%'||店舗コード||'%' or MchrCd is null; とすれば、それなりです。 効率が悪いのと、パラメータ次第で、誤動作しますけどね。 パラメータの指定様式を厳格化し、動的SQLを使のが、 最も正しい解決だとは思いますが。

sayabuu
質問者

お礼

早速、いただいた where MchrCd like '%'||店舗コード||'%' or MchrCd is null; を、試してみました。思うとおりの結果が出ました!(^^)! 動的SQLも検討してみます。動的SQLってなんだろうというところからの勉強ですが、がんばってみます。 ありがとうございました

その他の回答 (2)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

パラメータの個数が変わる場合にSQLは埋め込めません。動的SQLにする必要があります。

sayabuu
質問者

お礼

ありがとうございました。 動的SQLを検討してみます。 勉強不足で、動的SQLがどんなものかわかっていません。もしご存知でしたら、参考などないでしょうか?

回答No.1

こんにちは。 プロシージャの引数の前に・・・、 NVL関数の引数で、MchrCdが複数になったらおかしいですよね? 全体がつかめないのであれなんですが・・・。 (^^ゞ

sayabuu
質問者

お礼

ありがとうございます(^^) そういわれればそうですよね。気がつかなくって(^^ゞ

関連するQ&A