アプリ版:「スタンプのみでお礼する」機能のリリースについて

店舗コードを引数で受け取り、店舗名称を複数返すストアドプロシージャーを作成中です。

CURSORc_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

A 回答 (3件)

テーブル上の店舗コードがVARCHAR2(3)なのでしょうか?



最も簡素な解決は、
where MchrCd like '%'||店舗コード||'%' or MchrCd is null;
とすれば、それなりです。

効率が悪いのと、パラメータ次第で、誤動作しますけどね。

パラメータの指定様式を厳格化し、動的SQLを使のが、
最も正しい解決だとは思いますが。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/02/08 14:17

パラメータの個数が変わる場合にSQLは埋め込めません。

動的SQLにする必要があります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/02/08 14:12

こんにちは。



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

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

お礼日時:2005/02/08 14:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す