table 正在变异触发器看不到它

table is mutating trigger cannot see it

我有一个 table 像这样...

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

我想要一个触发器来计算和更新 table 受影响的每一行的平均分数。

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

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 告诉我 table 可能正在发生变化,触发器无法看到它。

行触发器通常不允许查询或修改声明它们的 table。要解决此问题,我建议您将触发器设置为 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;

祝你好运。