在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);
答案 0 :(得分:10)
这里有两种选择。您需要使用下面显示的命令将约束设置为在事务中延迟
SET CONSTRAINTS ALL DEFERRED;
这应该在执行您定义的UPDATE
语句之前运行。
或者,您可以在表定义
中将约束设置为INITIALLY DEFERRED
create table test(a number not null initially deferred deferrable, b number);
完成上述任何一项后,您应该能够运行问题中的DML。