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
确实存在。
索引已创建,但人员表中没有名为
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
结果:
名字 | 姓氏 |
---|---|
测试 | 测试 |
产品 | 测试 |