Plsql Oracle PL/SQL触发器
为什么我们不能在PL/SQL触发器中执行提交?如果触发器是自动提交的,为什么我们需要使用PRAGMA自治事务进行提交?请解释。。我对此感到非常困惑。提前感谢。触发器是自动调用的实体,因此通常不建议在触发器中使用提交或回滚。但在某些情况下,我们必须在触发器中使用提交或回滚。为此,我们使用Plsql Oracle PL/SQL触发器,plsql,oracle11g,Plsql,Oracle11g,为什么我们不能在PL/SQL触发器中执行提交?如果触发器是自动提交的,为什么我们需要使用PRAGMA自治事务进行提交?请解释。。我对此感到非常困惑。提前感谢。触发器是自动调用的实体,因此通常不建议在触发器中使用提交或回滚。但在某些情况下,我们必须在触发器中使用提交或回滚。为此,我们使用PRAGMA自治事务 一旦启动,自治事务就完全独立。它与主事务不共享锁、资源或提交依赖项。即使主事务回滚,也可以记录事件、递增重试计数器等 例如,有一组事务t1和t2。事务的全部要点是确保一组更改是原子的,并且要么
PRAGMA
自治事务
一旦启动,自治事务就完全独立。它与主事务不共享锁、资源或提交依赖项。即使主事务回滚,也可以记录事件、递增重试计数器等
例如,有一组事务t1
和t2
。事务的全部要点是确保一组更改是原子的,并且要么完全成功,要么完全被拒绝。如果我更新了t1
中的一行,但我的事务回滚。和t2
更改已经进行并提交,因此不会回滚。这通常意味着t2
数据现在不正确。允许代码部分成功几乎从来都不是一个好主意
示例代码如何使用PRAGMA
:
CREATE OR REPLACE TRIGGER mytrg
AFTER INSERT ON table1 FOR EACH ROW
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
myschema.myproc(:new.ID, :new.NAME, :new.TYPE_CODE, :new.LANGUAGE);
COMMIT;
END;
需要澄清的一点是:触发器是而不是自动提交;当触发它们的事务提交或回滚时,它们提交或回滚