压缩索引引起外健失效


  1. Declare
  2.   v_Version Varchar2(2);
  3. Begin
  4.     --功能:重建"外键索引",取消压缩特性
  5.   --说明:Oracle 8.1.7及以下版本(9i和10g没有此问题)
  6.     --如果外键所在的列存在使用了压缩特性的索引,则主键变化时,Oracle不能对引用该主键的子表进行参照完整性检查
  7.   --例如:删除收费细目ID为111的记录时,如果病人费用记录中存在对应的记录,Oracle会提示并且不允许删除
  8.   -- 但是,病人费用记录_IX_收费细目id使用了索引压缩特性:Compress 1,则Oracle不会提示并且允许删除
  9.   Select Substr(Banner, 6, 2) Into v_Version From V$version Where Substr(Banner, 1, 4) = 'CORE';
  10.   If To_Number(v_Version) < 9 Then
  11.     For R In (Select Distinct A.Index_Name
  12.               From User_Indexes A, User_Ind_Columns B,
  13.                    (Select Distinct D.Table_Name, D.Column_Name
  14.                      From User_Constraints C, User_Cons_Columns D
  15.                      Where C.Constraint_Type = 'R' And C.Constraint_Name = D.Constraint_Name) C
  16.               Where A.Index_Name = B.Index_Name And Nvl(A.Prefix_Length, 0) > 0 And B.Table_Name = C.Table_Name And
  17.                     B.Column_Name = C.Column_Name) Loop
  18.       Execute Immediate 'alter index ' || R.Index_Name || ' rebuild nocompress';
  19.     End Loop;
  20.   End If;
  21. End;
  22. /

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28878983/viewspace-2133905/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28878983/viewspace-2133905/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值