DRG-10849 Must hint domain index
在一个存在全文索引的表上做全文查询,得到DRG-10849错误。
SQL> select * from RES_BLOGS where catsearch(AD_TITLE,’oracle’,”)>0 and CREATION_DATE > sysdate;
select * from RES_BLOGS where catsearch(AD_TITLE,’oracle’,”)>0 and CREATION_DATE > sysdate
*
ERROR at line 1:
ORA-20000: Oracle Text error:
DRG-10849: catsearch does not support functional invocationSQL> explain plan for select * from RES_BLOGS where catsearch(AD_TITLE,:1,”)>0 and CREATION_DATE > sysdate;
Explained.
———————————————————–|
| Id | Operation | Name |
———————————————————–|
| 0 | SELECT STATEMENT | |
| 1 | PARTITION RANGE ALL | |
|* 2 | TABLE ACCESS BY LOCAL INDEX ROWID| RES_BLOGS |
|* 3 | INDEX RANGE SCAN | RES_BLOGS_IX1 |
———————————————————–|
Predicate Information (identified by operation id):
—————————————————
2 - filter(”CTXSYS”.”CATSEARCH”(”AD_TITLE”,:1,”)>0)
3 - access(”CREATION_DATE”>SYSDATE@!)
通过察看执行计划,发现SQL并没有优先选择domain index,而是选择在creation_date上的索引;这样当通过catsearch作filter的时候就报错了。
如上情况,当SQL条件中涉及到包括domain index的多个索引的时候,最好在SQL中显示指定domain index 的提示。确保我们要做的就是全文检索。



















为什么不考虑把创建日期的过滤条件放到catsearch里面呢?
.. ctx_dll.add_index(…,’fo’)
.. where catsearch(AD_TITLE,:1,’fo > 1234′)>0
没深入研究。
计划赶不上变化。所以要hint