表是变异触发器无法看到它

时间:2015-12-02 21:59:22

标签: sql oracle triggers insert

我有一张这样的桌子......

create table grades (id number, t1 number, t2 number, t3 number, mark number);

我想要一个触发器来计算和更新表格,其中包含受影响的每一行的平均分数。

所以我写了一个像这样的触发器......

create or replace trigger rades_trg 
after insert 
on grades
for each row
declare 
v_mark grades.mark%type;
begin
v_mark := (:new.t1 + :new.t2 + :new.t3) / 3;
update grades set mark = v_mark where id = :new.id;   
dbms_output.put_line(v_mark); 
end; 
/ 

然后我输入一条新记录......

insert into grades (id, t1, t2, t3) values (5, 100, 100, 25);

但是oracle告诉我表可能会发生变异而触发器无法看到它。

1 个答案:

答案 0 :(得分:1)

通常不允许行触发器查询或修改它们声明的表。要解决这个问题,我建议您将触发器设置为BEFORE触发器,这样您就可以在触发器中设置:new.mark

create or replace trigger rades_trg 
  before insert on grades
  for each row
begin
  :new.mark := (:new.t1 + :new.t2 + :new.t3) / 3;
  dbms_output.put_line(:new.mark); 
end;

祝你好运。