Oracle開發之觸發器調用存儲過程

轉載原文地址: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 ;



 

發佈了90 篇原創文章 · 獲贊 13 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章