- 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博客 ” ,链接:http://blog.itpub.net/28878983/viewspace-2133905/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28878983/viewspace-2133905/