oracle-包含破折号(-)的catsearch字符串

时间:2019-02-05 02:52:11

标签: oracle oracle-text

我有一个表,其中的数据类似于-

Table
abc-123
abc-124
abc-125

当我在catsearch之下进行操作时,它运行良好-

select * from table
where  CATSEARCH (columna,'abc-*',NULL)>0

但是当我在*之前加1时,它给我错误

select * from table
where  CATSEARCH (columna,'abc-1*',NULL)>0
  

ORA-29902:执行ODCIIndexStart()例程ORA-20000时出错:   Oracle文本错误:DRG-51030:通配符查询扩展也导致了   许多条款

我做错了,请帮助理解该问题

1 个答案:

答案 0 :(得分:0)

在Oracle Text中,您可以在创建索引时定义一些首选项。在您的情况下,您应该考虑定义自己的LEXER和printjoins。

BEGIN
   ctx_ddl.create_preference('INV_DEV_LEXER','BASIC_LEXER'); 
   ctx_ddl.set_attribute('INV_DEV_LEXER', 'printjoins','.-_%:;/,()?!*+@'); 
END;


CREATE TABLE inv_dev (name VARCHAR2(255));

INSERT INTO inv_dev VALUES ('abc-123');

INSERT INTO inv_dev VALUES ('abc-124');

INSERT INTO inv_dev VALUES ('abc-125');

CREATE INDEX inv_dev_idx ON inv_dev(name) 
        INDEXTYPE IS CTXSYS.CTXCAT 
        PARAMETERS ( 
            'LEXER INV_DEV_LEXER STOPLIST CTXSYS.EMPTY_STOPLIST' 
        );

SELECT * 
    FROM inv_dev
WHERE CATSEARCH (name,'abc-1*',NULL)>0;

如果未在printjoins中定义-符号,而在skipjoins中定义了'abc-123',则短语'abc123'被索引为-

也只需用\转义SELECT * FROM inv_dev WHERE CATSEARCH (name,'abc\-1*',NULL)>0; ,所以:

css