-
Declare
-
v_Version Varchar2(2);
-
Begin
-
--功能:重建"外键索引",取消压缩特性
-
--说明:Oracle 8.1.7及以下版本(9i和10g没有此问题)
-
--如果外键所在的列存在使用了压缩特性的索引,则主键变化时,Oracle不能对引用该主键的子表进行参照完整性检查
-
--例如:删除收费细目ID为111的记录时,如果病人费用记录中存在对应的记录,Oracle会提示并且不允许删除
-
-- 但是,病人费用记录_IX_收费细目id使用了索引压缩特性:Compress 1,则Oracle不会提示并且允许删除
-
Select Substr(Banner, 6, 2) Into v_Version From V$version Where Substr(Banner, 1, 4) = 'CORE';
-
If To_Number(v_Version) < 9 Then
-
For R In (Select Distinct A.Index_Name
-
From User_Indexes A, User_Ind_Columns B,
-
(Select Distinct D.Table_Name, D.Column_Name
-
From User_Constraints C, User_Cons_Columns D
-
Where C.Constraint_Type = 'R' And C.Constraint_Name = D.Constraint_Name) C
-
Where A.Index_Name = B.Index_Name And Nvl(A.Prefix_Length, 0) > 0 And B.Table_Name = C.Table_Name And
-
B.Column_Name = C.Column_Name) Loop
-
Execute Immediate 'alter index ' || R.Index_Name || ' rebuild nocompress';
-
End Loop;
-
End If;
-
End;
-
/
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28878983/viewspace-2133905/
,如需转载,请注明出处,否则将追究法律责任。