2011-01-14 62 views
6

在Oracle中,延迟约束仅在提交时检查。column not null deferredrable

在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); 

回答

10

这里有两种选择。要么你需要使用下面

SET CONSTRAINTS ALL DEFERRED; 

此所示的命令来设置约束的事务中被推迟应该做你所定义的UPDATE语句之前运行。

另外,您可以设置约束在表中定义INITIALLY DEFERRED

create table test(a number not null initially deferred deferrable, b number); 

要么做这些事情后,你应该然后能够运行,你的问题有DML。

+1

是的,你是对的。使用INITIALLY DEFERRED我的代码工作。谢谢。 – 2011-01-14 10:53:13

相关问题