Oracle 触发器和约束冲突中的自治_事务

Oracle 触发器和约束冲突中的自治_事务,oracle,transactions,triggers,constraints,Oracle,Transactions,Triggers,Constraints,我在尝试自治_事务时遇到了一个有趣的情况。考虑下面的情况(请注意,它的目的不是这样写的:只是概念证明): 截至当前时间的更改日期: SQL> select * from t; ID CHANGED --------- ----------------- 1 19.09.11 15:29:44 2 19.09.11 15:32:35 让我们休息5秒钟,然后执行以下操作: update t set id = 2 where id = 1;

我在尝试自治_事务时遇到了一个有趣的情况。考虑下面的情况(请注意,它的目的不是这样写的:只是概念证明):

截至当前时间的更改日期:

SQL> select * from t;

       ID CHANGED
--------- -----------------
        1 19.09.11 15:29:44
        2 19.09.11 15:32:35
让我们休息5秒钟,然后执行以下操作:

 update t set id = 2 where id = 1;
显然,它会因违反约束而失败,但它也不会更改
changed
属性:

SQL> select * from t;

       ID CHANGED
--------- -----------------
        1 19.09.11 15:29:44
        2 19.09.11 15:32:35
我的问题是:为什么会发生这种情况?我肯定我误解了一些基本概念,但我不能理解


提前感谢您的帮助。

PRAGMA自治事务将保存上下文,打开另一个会话并制作一些内容。必须提交,否则更改将丢失。您可以理解,在这个会话中,只有在数据库的某些块中所做的更改才有意义(自治)

所以,在你的扳机里你什么也不做。 这个变量:new.changed在另一个会话中是“changed”的,如果我们可以在这个模式中这样说的话。它不会因您的更新而更改

SQL> select * from t;

       ID CHANGED
--------- -----------------
        1 19.09.11 15:29:44
        2 19.09.11 15:32:35