批量结构更新后,一些视图/过程变得无效。
所以我只是重新编译它们:
exec dbms_utility.compile_schema( USER )
Run Code Online (Sandbox Code Playgroud)
但在那之后,之前状态良好的所有基于函数的索引都被破坏了,针对这些表的 SQL 语句失败了。这就是问题所在。
此类索引的示例:
CREATE INDEX DOCUMENTS_NMBR_UCN_FIDX ON DOCUMENTS(Str2Number(NUMBER_UCN));
CREATE INDEX DOCUMENTS_DATE_FIDX ON DOCUMENTS(Date2Number(REG_DATE));
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
Oracle 正在编译所有对象,因此就 Oracle 而言,所有对象中的所有代码都是新代码。
因此,Oracle 无法知道您的函数Str2Number
仍然返回创建索引时使用的相同值。
相反,您应该只重新编译无效对象,
exec dbms_utility.compile_schema(user, false);
Run Code Online (Sandbox Code Playgroud)
会这样做。
归档时间: |
|
查看次数: |
16236 次 |
最近记录: |