oracle - sql - Oracle:何时检查约束?

在我的理解中,一般应该在事务结束时检查约束。


begin



 insert into B (P, F)


 values (1, 1);


 insert into A (P)


 values (1);



 commit;


end;



但是,Oracle提供了错误(德语):


[23000][2291] ORA-02291: Integritäts-Constraint (DATABASE.AB_constraint) verletzt - übergeordneter Schlüssel nicht gefunden


ORA-06512: in Zeile 3


Position: 0



违反完整性约束-找不到引用的键。如果我逆转命令


begin



 insert into A (P)


 values (1);


 insert into B (P, F)


 values (1, 1);



 commit;


end;



它可以正常工作,约束在Oracle事务结束时是否没有被验证?如果是这样,有没有办法强制这种行为?

时间: 作者:

这称为延迟约束。


alter table some_table


 add constraint fk_something 


 foreign key (some_column) references other_table(pk_column)


 deferrable initially deferred;



作者:

解决此问题的一种方法是,推迟相关约束,例如:


begin


 execute immediate 'set constraint ab_constraint deferred';


 insert into B (P, F) values (1, 1);


 insert into A (P) values (1);


 execute immediate 'set constraint ab_constraint immediate';


 commit;


end;



作者:

除非将约束显式定义为延迟约束,否则在将行插入到表中时将检查约束。

作者:
...