あいまい検索
あいまい検索でのNULLレコードの扱いについて教えてください。
Oracleのデータベースに接続しています。
範囲/位置付のSQL Where句タブーDB SQLにて、
「:CK LIKE '%' || :CE || '%'」 →CKがDB項目、CEが検索項目
のように記載すると検索項目に値を入れるとあいまい検索できたのですが、検索項目を空欄にして検索した場合にDB項目がNULLのレコードが抽出されなくなりました。
「:CE IS NULL OR :CE = '' OR :CK LIKE '%' || :CE || '%'」
のようにしてもNULLのレコードが抽出されません。
何も入力しない場合はNULLレコードを表示するようにしたいのですが、解決策がありますでしょうか。
-
SQL Where句でうまくいかなかった原因は不明ですが、
SQL Where句タブでWhere句だけ記述するのではなく、
SQLコマンドでSelect句も含めて記述したらうまくいきましたので、ひとまず解決いたしました。
-
:CE IS NULL OR :CE = '' OR :CK LIKE '%' || :CE || '%' ですと、
CEが未入力の場合は全件表示ということになるような気もしますけれども・・
OR使うとインデックス効かなさそうなので、条件を変数に入れてDBーSQLに未入力時
項目更新CE ' Is null '入力時
項目更新CE ' = ''%'' || ''TRIM('& CE &')'' ||''%'''
DB-SQL
:CK @:CE
みたいな感じでどうでしょうか。
親タスクが必要なのでタスク構造にもよりますが -
コメントありがとうございます。
CEが未入力の場合は全件表示で問題ないです。
ひとまず解決はしましたので、また別の機会に参考にさせていただきたいと思います。
-
Springさん、
SQL Where句はMagicのゲートウェイがSQL言語ごとにSQL文を自動生成して送信します。これに対して、SQLコマンドはその記述がダイレクトに送信されますので、誤訳とかは発生しません。
SQL Where句で自動生成されたSQL文がどうなっているかは、SQLのログを取ってみると分かりますよ。SQLのログは、Magicのプルダウンメニューから「オプション」→「設定」→「ロギング」で取得できます。
-
tanda様、回答ありがとうございます。
間違ったフォルダのログを見ていたようでログ内容に気づけていませんでした。
他のログに埋もれてしまっているので、
次回SQL Where句を使った際に確認してみます。
-
Springさん、
ちなみに、「ロギング」はデフォルトの設定のまま使うと膨大な量のログが吐き出されますので解析がたいへんです。SQL文をチェックするだけでしたら最小のログ設定で行けるはずですので、機会があったら試してみてください。
サインインしてコメントを残してください。
コメント
6件のコメント