把触发器改成下面的试试:
CREATE OR REPLACE TRIGGER "AAO"."TRAS_OIL"
BEFORE INSERT --将after改成before
ON "OILORDER"
FOR EACH ROW
declare
tmp number;
tmp2 number;
begin
tmp := :new.hx_id;
select sum(fill_oil) into tmp2 from oilorder where hx_id = tmp;
insert into trg_tmp(xjy) values (tmp2);
end;
CREATE OR REPLACE TRIGGER "AAO"."TRAS_OIL"
BEFORE INSERT --将after改成before
ON "OILORDER"
FOR EACH ROW
declare
tmp number;
tmp2 number;
begin
tmp := :new.hx_id;
select sum(fill_oil) into tmp2 from oilorder where hx_id = tmp;
insert into trg_tmp(xjy) values (tmp2);
end;
非常感谢zgh2003
但是我还是不太明白:为什么不能after呢?
:new仅仅在before行级触发器中被修改。after insert的意思是:在执行插入操作完成以后再执行触发动作,
所以这时:new值已不再存在,于是在oracle中会给出异常提示触发失败。before insert的意思是:在执行插入操作以前就执行触发动作,
这时的:new值即为你要执行新的insert值。