删除表所有的约束(系统默认名约束删除)(存储过程)

 

 


原文地址:http://akdora.wordpress.com/2007/01/12/to-remove-all-constraints/

译文:2010-08-10


 

我在编程的时候认识到,我创建了错误的约束,我发现了两个方法来弥补我的错误

1-删除表,并且重新创建表,我想这不是一个我需要的解决方式

    drop table table_name cascade constraints;

2-如果你的数据库中有很多的约束,你不可能一个一个去删除,约束是那么的长

    alter table table_name drop constraint constraint_name;


 

所以,你可以使用以下存储过程

create or replace procedure disable_fk_constraint is

cursor fke_cur is

select table_name, constraint_name

from user_constraints

where constraint_name like '<<some criteria to specify your constraints>>';

exstr varchar2(4000);

begin

  for fke_rec in fke_cur

  loop

    exstr := 'alter table ' || fke_rec.table_name ||

             ' drop constraint ' ||

              fke_rec.constraint_name;

    begin

      execute immediate exstr;

    exception

      when others then

                dbms_output.put_line('dynamic sql failure: ' || sqlerrm);

               dbms_output.put_line('on statement: ' || exstr);    end;

  end loop;

end disable_fk_constraint;

/

 

你也可以在存储过程中使用以下的查询语句

select table_name, constraint_name

from user_constraints

where constraint_name not like 'sys%' and table_name = 'table_name';


 

同时,有许多的约束名是以SYS_CXXXXX开头的,就像你在表中指定的非空约束一样

create table ht_projects (

   project_id              integer           not null,

   project_name            varchar2(100)     not null,

   start_date              date              not null,

   target_end_date         date              not null,

   actual_end_date         date

);

如果你想要通过上面的存储过程删除它们,仅仅更改查询语句就可以了

你可以通过以下查询语句查看到所有的约束:

   select table_name,constraint_name from user_constraints where table_name = 'table_name';


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值