我有两个 oracle 数据库(测试和生产)。两者都是从同一个第一个数据库中克隆的。我的查询在测试服务器上运行良好。但是生产服务器报错。
SELECT * FROM MY_VIEW_TABLE mliv
WHERE CATSEARCH (TITLE, 'law*', NULL) > 0
此查询返回的响应没有问题。但是生产服务器报错。
ORA-20000: Oracle Text error: DRG-10599: column is not indexed
我也试过创建索引:
CREATE INDEX LACT_TITLE_TI ON MJ_LACTS(TITLE)
INDEXTYPE IS CTXSYS.CONTEXT;
然后我再次尝试运行查询。无论如何,上面的错误。我还查看了预先存在的索引。一样。
SELECT *
FROM dba_ind_columns
WHERE TABLE_NAME = 'MJ_LACTS'
此外,我也尝试了这些答案:
两台服务器有相同的索引,两台服务器有相同的版本。 我该如何解决这个问题?
CATSEARCH
上的文档描述了它的用法:
使用
运算符搜索CTXCAT索引。CATSEARCH
create table mj_lacts
as
select
level as id,
lpad(level, 100, '0') as title,
lpad(level, 4000, '0') as large_col
from dual
connect by level < 10
insert into mj_lacts
values(1, 'some text and law word', 'a')
SELECT *
FROM Mj_lacts
WHERE CATSEARCH(TITLE, 'law*', NULL) > 0
ORA-20000: Oracle Text error:
DRG-10599: column is not indexed
您需要创建
CTXCAT
索引并且它有效。
CREATE INDEX LACT_TITLE_TI ON MJ_LACTS(TITLE)
INDEXTYPE IS ctxsys.CTXcat;
SELECT *
FROM Mj_lacts
WHERE CATSEARCH(TITLE, 'law*', NULL) > 0
ID | 标题 | 大列 |
---|---|---|
1 | 一些文字和法律词汇 | a |
由于您没有提供有关这两个数据库的所有信息,因此很难说出为什么它在测试中有效而不在生产中有效。但它对所有 Oracle 版本都是一样的。
您可以通过
dbms_metadata
包在测试中检索索引DDL:
select dbms_metadata.get_dependent_ddl(
object_type => 'INDEX',
base_object_name => 'MJ_LACTS'
)
from dual
DBMS_METADATA.GET_DEPENDENT_DDL(OBJECT_TYPE=>'INDEX',BASE_OBJECT_NAME=>'MJ_LACTS') |
---|
〇〇在“FIDDLE_RMAAOVDFJEBDJXCLJUSU”上创建索引“FIDDLE_RMAAOVDFJEBDJXCLJUSU”。“LACT_TITLE_TI”。 |
• 无法从结果集中获取下一条记录。 IO 错误:套接字读取超时
• 为什么没有 where 子句时 Oracle join 不使用索引
• 使用 SQLAlchemy 的另一个引擎在另一个数据库中创建元数据的完整副本
• 如何在 C# Visual Code 2022 上修复此错误
• 如何修复 Android Studio 中的“未指定命名空间”错误?
• 当 torch 找不到 cuda 时如何修复,错误:版本 libcublasLt.so.11 未在具有链接时间参考的文件 libcublasLt.so.11 中定义?