Oracle Textによるテーブルの全文検索を使用して、Oracle Apexでアプリケーションを開発しています。アプリケーションには次のようなクエリがあります。
select task_id, ...
from vhd_tasks
where contains(hw_sn, :P5)>0
この場合、ドメイン インデックスを使用するため :P5 が null でない場合、テキスト インデックスは正常に機能します。
| 60 | TABLE ACCESS BY INDEX ROWID| HD_TASKS | 1257 | 326K| 322 (0)| 00:00:04 |
|* 61 | DOMAIN INDEX | CTX_HD_TASKS | | | 4 (0)| 00:00:01 |
しかし、:P5 に検索文字列が入力されていない場合に、:P5 で null を処理するようにクエリを変更する方法がわかりません。このクエリを試してみました
select task_id, ...
from vhd_tasks
where ( case when :P5 is not null then contains(hw_sn, :P5, 1)
else 1 end)>0
残念ながら、この場合、パフォーマンスは劇的に低下します。CONTAINS 関数で null 値を処理する方法はありますか?