原文地址: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';