触发变异问题

时间:2013-05-03 20:05:09

标签: sql oracle plsql triggers

我桌上有不同的车,每辆车都有自己的价格。 每次更新某些内容或在表中插入新行时,我都需要重新计算并更新平均价格。

我试图在Trigger中使用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;

1 个答案:

答案 0 :(得分:2)

处理这种情况的一种方法是使用行级触发器在临时表中记录一些信息,如id#modified,然后使用语句级触发器来读取该信息并执行期望的工作。

然而,在这种情况下,我会质疑这是否值得。考虑在需要时计算查询中的平均值;或者将其嵌入香农评论中的建议;如果在运行中计算它是太多开销,那么将其嵌入物化视图中。