我想禁用NOT NULL约束到表中插入数据进行测试,但我找不到禁用未命名约束的方法。有没有办法在oracle中禁用/启用未命名的约束?
我发现足够的信息来禁用命名的约束,但我找不到禁用未命名的NOT NULL约束的示例。
我想在不查询数据字典的情况下实现此操作,但是......如果只有这样,我愿意这样做。但我想用干净的ALTER TABLE DDL。
我想禁用NOT NULL约束到表中插入数据进行测试,但我找不到禁用未命名约束的方法。有没有办法在oracle中禁用/启用未命名的约束?
我发现足够的信息来禁用命名的约束,但我找不到禁用未命名的NOT NULL约束的示例。
我想在不查询数据字典的情况下实现此操作,但是......如果只有这样,我愿意这样做。但我想用干净的ALTER TABLE DDL。
您将需要查询数据字典,像这样的事情将禁用表上的所有约束。但请注意,这将禁用系统范围内的约束,而不仅仅是针对您的会话。也许您真正想要的是推迟约束?
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
感谢马修,它看起来像查询数据字典是唯一的方法去。谢谢! – im8bit 2010-12-16 15:18:11
你也可以改变列如下
create table test_null (col_n number not null);
alter table test_null modify col_n number null;
感谢加里,它也可以工作,我发现这个选项的问题是它提交了任何挂起的更改到表,我真的想要避免这一点。 – im8bit 2010-12-17 17:01:39
技术上不存在这样的东西作为Oracle的“未命名的约束”。如果你不自己命名,困难的是,Oracle给它一个名字 - 这个名字会因实例而异。这就是为什么我总是命名所有约束,除了NOT NULL约束(永远不需要明确命名)。 – 2010-12-17 06:42:00
你是对的杰弗里,感谢您的评论。我在谈论的约束是由数据库生成的名称,而不是由用户创建的。 – im8bit 2010-12-17 17:03:51