插入前触发器会导致行数太多。错误

时间:2016-02-11 18:34:12

标签: oracle plsql triggers

我有一个触发器:

create or replace trigger trig
  before insert on sistem  
  for each row
declare
  v_orta number;
 begin
   SELECT v_orta INTO :new.orta_qiymet
   FROM   sistem;
   v_orta:=(:new.riyaziyyat+:new.fizika)/2;

   insert into sistem(orta_qiymet)
   values(v_orta);

end trig;

当我插入一行时:

insert into sistem(riyaziyyat,fizika) values(4,4)

我收到错误:

error capture

为什么我会收到错误?

1 个答案:

答案 0 :(得分:2)

这从根本上不了解触发器的工作原理。您通常不能从触发器所针对的表中进行选择,并且插入前触发器不应该再次插入到同一个表中 - 因为这会导致触发器无限地再次触发(直到Oracle注意到并停止它) )。您目前甚至没有使用您尝试查询的v_orta值。

我怀疑您认为触发器可能是而不是您的原始插入内容,并且实际上您希望根据其他两列自动在新插入的行中设置orta_qiymet值你提供了。要做到这一点,你不能(也不能)选择那些值;相反,你正如你所做的那样引用the :NEW pseudorecord,然后在同一个伪波形中设置第三列值:

create or replace trigger trig
  before insert on sistem  
  for each row
begin
  :new.orta_qiymet := (:new.riyaziyyat + :new.fizika)/2;
end trig;
/

文档中有很多信息;这类似于one of the examples