我有一个触发器:
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)
我收到错误:
为什么我会收到错误?
答案 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。