列不可归零

时间:2011-01-14 10:11:33

标签: oracle data-integrity

在Oracle中,仅在提交时检查延迟约束。

在NOT NULL约束的情况下,DEFERRABLE子句的含义是什么? 例如

create table test(a number not null deferrable, b number);
insert into test(a,b) values (222, 111);
commit;

在这些陈述之后,我认为以下代码可以正常工作

update test set a = null where b = 111;
delete test where b = 111;
commit;

但事实并非如此。

两个定义有什么区别?

create table test1(a number not null deferrable, b number);
create table test2(a number not null, b number);

1 个答案:

答案 0 :(得分:10)

这里有两种选择。您需要使用下面显示的命令将约束设置为在事务中延迟

SET CONSTRAINTS ALL DEFERRED;

这应该在执行您定义的UPDATE语句之前运行。

或者,您可以在表定义

中将约束设置为INITIALLY DEFERRED
create table test(a number not null initially deferred deferrable, b number);

完成上述任何一项后,您应该能够运行问题中的DML。