【发布时间】:2016-03-07 08:26:51
【问题描述】:
我有一张这样的桌子......
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 告诉我该表可能正在发生变化,并且触发器无法看到它。
【问题讨论】:
-
有什么理由不想使用虚拟列或视图,而不是存储冗余数据?
-
希望
dbms_output.put_line仅用于调试目的。否则您可能会收到 ORA-20000: ORU-10027 错误。
标签: sql oracle triggers insert