这是我的设置:
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显然不适合我。
任何想法如何解决?
答案 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;
(上例中不需要提示)