台灣最大程式設計社群網站
線上人數
754
 
會員總數:245465
討論主題:189222
歡迎您免費加入會員
討論區列表 >> Oracle >> Table 中設定的 Trigger 無法在異動資料後正確的執行
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
Table 中設定的 Trigger 無法在異動資料後正確的執行
價值 : 200 QP  點閱數:3111 回應數:4

樓主

神奇的Jack
中級專家
2341 3
1090 227
發送站內信

各位DBA 好, 小弟有問題想請教各位 : 我使用 TOAD 在一個 Oracle 的DB內, 指定一個 Table , 並且新增了一個 Trigger.
目的是希望可以在 BG_T2 這個資料表異動(Insert / Update / Delete )資料的時候, 可以更新 BG_T1 的 EXPENSE_TOTAL. (兩個 Table 之間的關連是以 Budget_NO 來判斷.)

但是目前的狀況是, 只要 BG_T1 有資料異動, 就會顯示 UPDATE_BALANCE 這個 Trigger 有 Error. Error 的那一行就是 UPDATE BG_T1 a SET.....
還請 DBA 指點一下, 幫忙看看如何解決這個問題. 感謝!

以下是Trigger 的內容 :

CREATE OR REPLACE TRIGGER UPDATE_BALANCE AFTER DELETE OR INSERT OR UPDATE
ON BG_T2
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
V_ERRNO INTEGER;
V_ERRMSG VARCHAR2(200);
BEGIN

UPDATE BG_T1 a SET a.EXPENSE_TOTAL = (SELECT sum(b.LOCAL_AMOUNT) FROM BG_T2 b WHERE b.BUDGET_NO = :NEW.BUDGET_NO )
WHERE a.BUDGET_NO = :NEW.BUDGET_NO ;

EXCEPTION
WHEN OTHERS THEN
V_ERRNO := -20002;
V_ERRMSG := '<UPDATE_BUDGET_BALACE> Update BG_T1 has Error !';
RAISE_APPLICATION_ERROR( V_ERRNO, V_ERRMSG );

END UPDATE_BALANCE;

搜尋相關Tags的文章: [ Oracle ] , [ Trigger ] , [ Update ] ,
本篇文章發表於2013-09-05 21:44
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
最有價值解答

花旗蔘
檢舉此回應
你的問題是在 ORA-4091
04091. 00000 - "table %s.%s is mutating, trigger/function may not see it"
*Cause: A trigger (or a user defined plsql function that is referenced in
this statement) attempted to look at (or modify) a table that was
in the middle of being modified by the statement which fired it.
*Action: Rewrite the trigger (or function) so it does not read that table.

And refer
http://www.blueshop.com.tw/board/FUM200410061527578K1/BRD20130318104443OOB.html
本篇文章回覆於2013-09-05 23:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

神奇的Jack
檢舉此回應
抱歉, 我應該要再貼上我的錯誤訊息 :
ORA-06512 : at "UPDATE_BALANCE", line xx
ORA-04088 : error during execution of trigger 'UPDATE_BALANCE'

我有嘗試在BEGIN之前加上 pragma autonomous_transaction;
但是還是會發生相同的錯誤.

可否請高手再詳細指點一下? 謝謝! :)
本篇文章回覆於2013-09-06 10:23
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
不錯的參考

花旗蔘
檢舉此回應
1'你用pragma autonomous_transaction
之後有加commit嗎?

請注意 #7的部份
http://www.blueshop.com.tw/board/FUM200410061527578K1/BRD20130318104443OOB.html

2'把EXCEPTION 那段先comment ,再執行,看實際上 報的錯為何?
本篇文章回覆於2013-09-06 11:18
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

神奇的Jack
檢舉此回應
感謝!! 版主, 我加上 commit 之後, 就可以正常的運作了. 謝謝~~ :)
本篇文章回覆於2013-09-06 13:50
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.