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;
4

1 回答 1

2

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

但是,在这种情况下,我会质疑这是否值得。考虑在需要时计算查询中的平均值;或将其嵌入到香农评论中建议的视图中;如果动态计算开销太大,则将其嵌入物化视图中。

于 2013-05-03T21:10:03.807 回答