
例えば、あらかじめテーブルなどを読み、その内容により、
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の制御文をうまく追加できない。
No.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」となり常に真となるので、実質検索条件を指定していない
場合と同じ事になります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLでlike検索条件を副問い合わ...
-
ストアドプロシージャでのパラ...
-
MERGE文について
-
”パラメータ値を TextBox から ...
-
テキストボックスのvalueとtext...
-
VB.NETで DataRow()を利用して...
-
VBAでActiveDirectoryのユーザ...
-
【Excel VBA】指定行以降をクリ...
-
エクセルVBAで範囲内での位置取...
-
count(*)で取得した値をJAVAの...
-
SUMPRODUCT関数を用いた最小値
-
利用者側のMACアドレスを取得し...
-
値を返さないコード パス
-
エクセルVBAでコピーして順...
-
特定のセルが空白だったら、そ...
-
like演算子内に変数って使えな...
-
ExcelのINDEXとMATCH関数でスピ...
-
エクセル 条件を指定した標準...
-
VB.NETで、EXCELの右寄せ
-
ReportViewerでのパラメータ設定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
”パラメータ値を TextBox から ...
-
MERGE文について
-
[SQL]重複内容を持つデータから...
-
PLSQLで条件によりSQLを動的に...
-
ストアドプロシージャでのパラ...
-
SQLでlike検索条件を副問い合わ...
-
shellからストアドプロシージャ...
-
ビュー(インラインビュー)で...
-
Exp.exeに指定するparfileパラ...
-
プロシージャーに動的にパラメ...
-
oracle10gの精度について
-
SQL構文を手助けしてください
-
SQL文 教えて下さい。
-
VB.NETで DataRow()を利用して...
-
Accessのクエリで、replace関数...
-
テキストボックスのvalueとtext...
-
ExcelVBAを使って、値...
-
エクセルで、絶対値の平均を算...
-
PHP8でWarning:Undefined varia...
-
[エクセル]連続する指定範囲か...
おすすめ情報