我有一张这样的桌子......
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告诉我表可能会发生变异而触发器无法看到它。
答案 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;
祝你好运。