在oracle中有没有办法禁用/启用未命名的约束?

时间:2010-12-16 01:10:43

标签: oracle constraints

我想在表中禁用NOT NULL约束来插入测试数据,但我找不到禁用未命名约束的方法。

我找到了足够的信息来禁用命名约束,但我找不到禁用未命名的NOT NULL约束的示例。

我想在不查询数据字典的情况下实现这一点,但是......如果它是唯一的方法,我愿意这样做。但我想使用干净的ALTER TABLE DDL。

2 个答案:

答案 0 :(得分:5)

您将需要查询数据字典,这样的事情将禁用表上的所有约束。但请注意,这将禁用系统范围内的约束,而不仅仅是针对您的会话。也许您真正想要的是推迟约束?

drop table testxx

 drop table testxx succeeded.
create table testxx ( id number not null ) 

create table succeeded.
select status from user_constraints where table_name = 'TESTXX'

STATUS   
-------- 
ENABLED  

1 rows selected

begin
 for cnames in ( select table_name,constraint_name from user_constraints where table_name = 'TESTXX' ) loop
    execute immediate 'alter table ' || cnames.table_name || ' disable constraint ' || cnames.constraint_name;
  end loop;
end;

anonymous block completed
select status from user_constraints where table_name = 'TESTXX'

STATUS   
-------- 
DISABLED 

1 rows selected

答案 1 :(得分:5)

您也可以按如下方式更改列

create table test_null (col_n number not null);
alter table test_null modify col_n number null;