1

这是我的设置:

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) / from customer where CATSEARCH(customer_name,'ltd Anderson',null) > 0 or customer_id > 100 错误报告:SQL 错误:ORA-20000: Oracle Text错误:DRG-10849:catsearch 不支持功能调用 20000。00000 -“%s” *原因:调用了存储过程“raise_application_error”,导致生成此错误。*操作:更正错误消息中所述的问题,或联系应用程序管理员或 DBA 以获取更多信息。

HINT 建议来自这里:https ://forums.oracle.com/message/2847094显然对我不起作用。

任何想法如何解决?

4

1 回答 1

1

问题是最有可能在您的查询中 OracleCATSEARCH用作函数调用,而不是使用您的索引。这是因为您有 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;

(在上面的例子中提示不应该是必需的)

于 2013-10-21T13:21:13.540 回答