我正在尝试更新CLOB列,但由于该列未索引错误而失败。
我试图删除并重新创建索引,但仍然遇到相同的错误:
create index idx_response_contxt on test (response) indextype is ctxsys.context;
declare
begin
for i in (select response from test
where contains(response,'{"IdType">BANK}') > 0 for update) loop
dbms_lob.write(i.response, 12, 5444, '111111111111');
end loop;
end;
/
第1行出现错误:
ORA-20000:Oracle文本错误:
DRG-10599:列未编制索引
ORA-06512:在第4行
似乎“用于更新”禁用了索引。如果我在没有包含功能的情况下运行,则不会出现任何错误,但代价非常高:
declare
begin
for i in (select response from test where response like '%"IdType">BANK%' for update) loop
dbms_lob.write(i.response, 12, 5444, '111111111');
end loop;
end;
/
有什么建议吗?谢谢!
答案 0 :(得分:0)
在创建索引时需要使用适当的参数,因为它将决定何时同步索引。它可以是实时的或定期的。
create index idx_response_contxt on test (response)
indextype is ctxsys.context PARAMETERS ('SYNC (ON COMMIT)'); -- real time synchronization
上面的示例是实时重建索引。您可以在PARAMETER中使用不同的子句在可配置的时间重建。像'(SYNC (EVERY "SYSDATE+1/24")'
一样-将每小时同步一次,定期
根据要求使用它。
干杯!
答案 1 :(得分:0)
我用“ PARAMETERS('SYNC(ON COMMIT)')”重建了索引,并再次运行了查询,但是没有用,因为它仍然看不到索引并给出了“ ORA-20000:Oracle Text错误: DRG-10599:列未建立索引”错误。
还有其他建议吗?谢谢。