dポイントプレゼントキャンペーン実施中!

例えば、あらかじめテーブルなどを読み、その内容により、
SQLの文そのものを非常に変えたいとします。

SQLその1
select * from TABLEA
where A = 1

SQLその2
select * from TABLEA
where A = 1 and B = 2 and C = 3 and D = 4

上記は例ですが、内容などにより複雑な条件式を追加したい。
ベースのSQLは非常に長い為、
例えば 完全に切り分けるのでは無く、共通の部分は共通ソースとしたい。
また、プリプロセッサみたいに、条件式が追加された場合
あたかも、初めからそのSQLのみがあり、他の制御文などをSQL文自身には追加したくない。

動的SQLでは無い方法でそのような事が可能でしょうか?

----- イメージ -----
select * from TABLEA
where A = 1
IF (条件がある時のみ)
B = 2 and C = 3 and D = 4
END IF;
-------------------
実際には、SQL文の中にPLSQLの制御文をうまく追加できない。

A 回答 (1件)

こんにちわ。



> 動的SQLでは無い方法でそのような事が可能でしょうか?
decode を使えば可能かもです。

例えば、v1, v2, v3 と言う数値型変数にそれぞれ列B, 列C, 列Dに
対する検索値が格納されていて、値が-1 だった場合に、検索条件を
無効化する場合、以下のようなSQL で実現できます。

select * from tablea
 where a=1 and b=decode(v1, -1, b, v1) and
  c=decode(v2, -1, c, v2) and
  d=decode(v3, -1, d, v3);

こうすると、例えばv1変数に-1 が設定されている時の検索条件は
「b=b」となり常に真となるので、実質検索条件を指定していない
場合と同じ事になります。
    • good
    • 0
この回答へのお礼

お返事が遅くなりました。
参考にしました。ありがとうございます。

お礼日時:2012/07/19 22:52

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

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