现在往trade表中插入一条数据,则会更新goods表中对应g_id的id的counts, SQL> create trigger dele_insert 2 after insert or update on trade 3 for each row 4 begin 5 if inserting then 6 update goods set counts=(counts+1) where id=:old.g_id; 7 elsif deleting then 8 update goods set counts=(counts-1) where id=:old.g_id; 9 end if; 10 end; 11 /
现在想实现如果goods 对应的counts>30,则自动更新saler为1,标识热销商品。 自己写的触发器为: create trigger upsaler after update on goods for each row begin case when updating('counts') then if :new.counts>10 then update goods set saler='1' where :new.id=:old.id; end if; end case; end; / 但是往trade插入数据时,抛出异常 第 1 行出现错误: ORA-04091: 表 SYSTEM.GOODS 发生了变化, 触发器/函数不能读它 ORA-06512: 在 "SYSTEM.UPSALER", line 6 ORA-04088: 触发器 'SYSTEM.UPSALER' 执行过程中出错 ORA-06512: 在 "SYSTEM.G_T", line 2 ORA-04088: 触发器 'SYSTEM.G_T' 执行过程中出错 ORA-06512: 在 line 5
--有上面的表的情况下,下面这个触发器 编译是不会报错的,也就是你写的一模一样
create trigger upsaler
after update on goods
for each row
begin
case
when updating('counts') then
if :new.counts>10
then
update goods set saler='1' where :new.id=:old.id;
end if;
end case;
end;
------解决方案--------------------