Plsql Oracle PL/SQL触发器

Plsql Oracle PL/SQL触发器,plsql,oracle11g,Plsql,Oracle11g,为什么我们不能在PL/SQL触发器中执行提交?如果触发器是自动提交的,为什么我们需要使用PRAGMA自治事务进行提交?请解释。。我对此感到非常困惑。提前感谢。触发器是自动调用的实体,因此通常不建议在触发器中使用提交或回滚。但在某些情况下,我们必须在触发器中使用提交或回滚。为此,我们使用PRAGMA自治事务 一旦启动,自治事务就完全独立。它与主事务不共享锁、资源或提交依赖项。即使主事务回滚,也可以记录事件、递增重试计数器等 例如,有一组事务t1和t2。事务的全部要点是确保一组更改是原子的,并且要么

为什么我们不能在PL/SQL触发器中执行提交?如果触发器是自动提交的,为什么我们需要使用PRAGMA自治事务进行提交?请解释。。我对此感到非常困惑。提前感谢。

触发器是自动调用的实体,因此通常不建议在触发器中使用提交或回滚。但在某些情况下,我们必须在触发器中使用提交或回滚。为此,我们使用
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;

需要澄清的一点是:触发器是而不是自动提交;当触发它们的事务提交或回滚时,它们提交或回滚