2013-11-22 59 views
-1

我想創建一個觸發器來計算服務的日期和分支的ID。觸發器的目標是計算分支ID的數量以及服務的日期。如果計數大於3,那麼觸發器應該生效。那我可是遇到的問題是,甲骨文已經確定,這是一個不同誘變觸發,並且不允許有錯誤消息的數據插入:刪除變異觸發器

ORA-04091: table user1.SERVICEIH is mutating, trigger/function may not see it 
ORA-06512: at "user1.SERVICE_CHECKIH", line 5 
ORA-04088: error during execution of trigger 'user1.SERVICE_CHECKIH' 
+0

看看這個問題:http://stackoverflow.com/questions/2138363/oracle-triggers-problem -with-mutating-tables?rq = 1 –

+2

這是一個*驚人的*編輯 - 你真的認爲它使問題可以回答? –

回答

0

你濫用了扳機。我的意思是用錯了觸發器。

  1. 插入/更新在表中的行
  2. 上表A(每行)的觸發器執行上表的查詢甲

甲骨文拋出ORA-04091這是一個預期的和正常的行爲,Oracle希望保護你免於你自己,因爲它保證每條語句都是原子的(即將失敗或完全成功),並且每條語句都看到數據的一致視圖

您會期望查詢2)不要看到插入的行( 1)。這將是矛盾

解決方案: - 使用之前,而不是之後

CREATE OR REPLACE TRIGGER SERVICE_CHECKih 
BEFORE INSERT OR UPDATE ON SERVICEih 
+0

如果這解決了您的問題,請將其標記爲正確的答案,這會更有禮貌 – SriniV