轉載原文地址:http://blog.csdn.net/zftang/article/details/6586996
大家都知道觸發器是無需commit的,而且也不能寫commit;觸發器和觸發它的DML是同一個事務
DML提交了,觸發器的操作也提交了,所以無需Commit;否則就會造成錯誤信息。
當然,如果你一定要在觸發器裏寫COMMIT,那也是可以的,可以用Oracle中的自治事務來處理,自治事務就相當於一個事務裏的子事務。
在正常情況下,Oracle規定在觸發器中不能運行 DDL(即Create/Alter/Drop)語句和Commit/Rollback語句的,因爲DDL操作是隱性提交的,在觸發器不允許有Commit,如在觸發器中加入DDL語句,這種隱性提交就會導致錯誤信息;但有時特殊情況下需要在觸發器中使用DDL語句,這時怎麼辦。
可以採取以下的解決辦法:
create or replace trigger trigger_table1
after update or insert on martin.table1
for each row
declare
PRAGMA AUTONOMOUS_TRANSACTION;--自制事務處理
begin
--調用拆分存儲過程,觸發器每次只拆分一條
mc_print(
:NEW.id,:NEW.name
);
commit;
end trigger_table1 ;