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;
祝你好运。
我有一个 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;
祝你好运。