0
我在桌上有不同車的數量,每輛車都有自己的價格。 每當有東西被更新或表中插入新行時,我需要重新計算和更新平均價格。觸發突變問題
我試圖使用觸發器內部AVG()
功能卻突然得到運行時錯誤: ORA-04091: table abcde.SCL is mutating, trigger/function may not see it
我認爲解決方案是使用語句而不是行觸發器觸發。在這種情況下,語句觸發器不允許使用:new.ID or :old.ID
,那麼如何檢測哪個汽車品牌更新,以重新計算平均值?對付這種情況
create or replace trigger AvgTrigger
after insert on cars
for each row
declare
carAvg number;
begin
SELECT Avg(price) into carAvg from car where id# = :new.id#;
end;
在選擇列表中定義一個汽車視圖,其中avg(價格)超過(由id#分區)carAvg'。我猜。您顯示的觸發器沒有數據修改,平均計算沒有輸出,因此可以完全刪除。 – 2013-05-03 20:18:47
觸發器尚未完成,這是一個原因。 – 2013-05-03 20:27:51
http://asktom.oracle.com/pls/asktom/ASKTOM.download_file?p_file=6551198119097816936基本上問題是在觸發器運行時表格正在改變。這是一個複雜的交易,讓我們讓湯姆凱特回答你的問題。 – 2013-05-03 21:08:39