実際、BIRTレポートでこの種のものが使用されているのを見てきました。BIRTランタイムに渡されるクエリの形式は次のとおりです。
select a,b,c from t where a = ?
そしてその '?' 実行時に、ドロップダウンボックスから選択された実際のパラメーター値に置き換えられます。ドロップダウンの選択肢は次のとおりです。
select distinct a from t
union all
select '*' from sysibm.sysdummy1
すべての可能な値と " *
" を取得できるようにします。ユーザーが*
ドロップダウンボックスから" "を選択した場合(つまり、aのすべての値を選択する必要がある場合)、クエリを実行する前に(JavaScriptで)変更する必要があります。
「?」以来 位置パラメータであり、他のものが機能するためにそこに残さなければなりません。JavaScriptはクエリを次のように変更します。
select a,b,c from t where ((a = ?) or (1==1))
これにより、基本的にwhere句の効果がなくなり、位置パラメータはそのままになります。
また、SQLクエリを動的に作成する際に、レイジーコーダーが使用するANDケースも確認しました。
で始まりselect * from t
、チェックするクエリを動的に作成する必要があるとします。
- 名前はボブです。そして
- 給与は$ 20,000以上
最初の人をWHEREで追加し、次の人をANDで追加する人もいます。
select * from t where name = 'Bob' and salary > 20000
怠惰なプログラマー(これは必ずしも悪い特性ではありません)は、追加された条件を区別せず、最初select * from t where 1=1
にAND句を追加します。
select * from t where 1=1 and name = 'Bob' and salary > 20000