Oracle文本:catsearch不支持函数调用

时间:2013-10-21 12:56:39

标签: sql oracle plsql oracle-text

这是我的设置:

CREATE TABLE CUSTOMER 
(
  CUSTOMER_ID NUMBER(9, 0) NOT NULL 
, CUSTOMER_NAME VARCHAR2(61 BYTE)
);

CREATE INDEX CTXCAT_CUSTOMER_NAME 
    ON CUSTOMER (CUSTOMER_NAME) INDEXTYPE IS CTXSYS.CTXCAT;

我的(简化)查询:

select /*+ INDEX(customer CTXCAT_CUSTOMER_NAME)*/* 
from customer
where CATSEARCH(customer_name,'ltd Anderson',null) > 0 or customer_id > 100

错误:

  

在命令的第1行开始出错:select / * + INDEX(customer   来自客户的CTXCAT_CUSTOMER_NAME) /   CATSEARCH(customer_name,'anderson',null)> 0或customer_id> 100   错误报告:SQL错误:ORA-20000:Oracle文本错误:DRG-10849:   catsearch不支持功能调用   20000.00000 - “%s”   *原因:存储过程'raise_application_error'              被调用,导致生成此错误。   *操作:按错误消息或联系中所述更正问题              应用程序管理员或DBA以获取更多信息。

HINT的建议来自这里:https://forums.oracle.com/message/2847094显然不适合我。

任何想法如何解决?

1 个答案:

答案 0 :(得分:1)

问题是,您的查询中很可能Oracle使用CATSEARCH作为函数调用,而不是使用索引。这是因为您具有OR条件,Oracle必须检查表中的每一行。这也是HINT无法帮助的原因。你能告诉我们执行计划吗?

也许试试这个:

select * 
from customer
where customer_id > 100
UNION
select /*+ INDEX(customer CTXCAT_CUSTOMER_NAME)*/ *
from customer
where CATSEARCH(customer_name,'ltd Anderson',null) > 0;

(上例中不需要提示)