您的线人是错误的,如果他在谈论 Oracle 数据库触发器:
1)您不能将 COMMIT 放在非自治的 Oracle 触发器中:
SQL> create trigger this_wont_work
2 after insert on emp
3 begin
4 commit;
5 end;
6 /
Trigger created.
SQL> insert into emp (empno) values (123)
2 /
insert into emp (empno) values (123)
*
ERROR at line 1:
ORA-04092: cannot COMMIT in a trigger
ORA-06512: at "TONY.THIS_WONT_WORK", line 2
ORA-04088: error during execution of trigger 'TONY.THIS_WONT_WORK'
2) 如果触发器是自治的(即在其声明部分有 PRAGMA AUTONOMOUS_TRANSACTION),那么它只能提交它(触发器)所做的任何更改。
触发器提交您在该触发器之外所做的工作没有任何危险。
注意:在触发器中使用自治事务是危险的,除了某些情况,因为即使触发语句回滚,自治触发器执行的操作也会被提交。如果使用不当,这很容易导致数据损坏。