こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PLSQLで条件によりSQLを動的に変えたい

例えば、あらかじめテーブルなどを読み、その内容により、
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の制御文をうまく追加できない。

投稿日時 - 2012-06-22 23:48:17

QNo.7549361

困ってます

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

こんにちわ。

> 動的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」となり常に真となるので、実質検索条件を指定していない
場合と同じ事になります。

投稿日時 - 2012-06-24 08:43:16

お礼

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

投稿日時 - 2012-07-19 22:52:00

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問