我有一个表,其中的数据类似于-
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:通配符查询扩展也导致了 许多条款
我做错了,请帮助理解该问题
答案 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