Oracle 文本错误:drg-10599 列未建立索引

问题描述 投票:0回答:1
Create table person( fist_name varchar2(100), last_name varchar2(100));

Exec ctx_ddl.create_preference('nm','multi_column_datastore');
Exec ctx_ddl.set_attribute('nm','columns','first_name, last_name');

Create index perdex on person('columns') index type is ctxsys.context parameters('datastore nm');

Select * from person where contains('columns','test')>1;

我在最后一个查询中遇到错误:

drg-10599 columns is not indexed
。然而,索引
perdex
确实存在。

oracle indexing oracle-text
1个回答
0
投票

索引已创建,但人员表中没有名为

columns
的列。 更重要的是,你那里有一个错过咒语。
fist_name
不等于
first_name

我假设您想要搜索表格并检查

first_name
last_name
列中是否包含搜索到的文本值。 如果我的观点是正确的,我想借助
dummy_col
列来说明解决方案,但您可以在那里放置任何您想要的列。

创建表:

Create table person( first_name varchar2(100), last_name varchar2(100), dummy_col varchar2(1));

创建首选项并为其设置属性:

Exec ctx_ddl.create_preference('nm','multi_column_datastore');
Exec ctx_ddl.set_attribute('nm','columns','first_name, last_name');

在虚拟列上创建索引:

Create index myindex on person(dummy_col) indextype is ctxsys.context parameters('DATASTORE nm')

将一些示例数据插入表中:

Insert into person (first_name,last_name) values('test','test');
Insert into person (first_name,last_name) values('prod','test');
Insert into person (first_name,last_name) values('prod','prod');

同步索引,因此它将索引插入的行:

EXECUTE ctx_ddl.sync_index('myindex2');

运行查询来搜索

test
单词:

Select * from person where contains(dummy_col,'test')>0

结果:

名字 姓氏
测试 测试
产品 测试
© www.soinside.com 2019 - 2024. All rights reserved.