Sql 插入或更新销售项目后的oracle触发器

Sql 插入或更新销售项目后的oracle触发器,sql,oracle,triggers,ora-04088,Sql,Oracle,Triggers,Ora 04088,我有这个表,它代表一个弱实体,是一个典型的介绍订购项目的表: 在项目中插入必要值(订单ID、产品ID、产品QTD、采购价格) 每次我在该表上插入或更新一个条目时,我希望触发器更新最后一列(不带iva的产品的总价格)来执行此操作:totalPrice=totalPrice*(1+(iva/100) 所以,我想到了这个,但是当涉及到新的和旧的价值观时,我完全错了 create or replace trigger t_replaceTotal after insert or update of id

我有这个表,它代表一个弱实体,是一个典型的介绍订购项目的表: 在项目中插入必要值(订单ID、产品ID、产品QTD、采购价格)

每次我在该表上插入或更新一个条目时,我希望触发器更新最后一列(不带iva的产品的总价格)来执行此操作:totalPrice=totalPrice*(1+(iva/100)

所以,我想到了这个,但是当涉及到新的和旧的价值观时,我完全错了

create or replace
trigger t_replaceTotal
after insert or update of id_prod,qtd_if,prec_total_if on item_fornecimento
for each row 

declare
iva produto.iva_prod%type;
idProd  produto.id_prod%type;
r_old item_fornecimento.prec_total_if%type:=null;
r_new item_fornecimento.prec_total_if%type:=null;

begin
  select iva_prod,id_prod into iva,idprod from produto p where p.id_prod = id_prod; 
  r_old:= :old.prec_total_if;
  r_new:= :new.prec_total_if;
  update item_fornecimento item set prec_total_if = r_old * (1+(iva/100)) where item.id_prod = idprod;
end;
有人能帮我重写这段代码吗?我得到一个错误:ORA-01422:exact fetch返回的行数超过了请求的行数 ORA-06512:“FUSION.T_replaceToal”第8行
ORA-04088:执行触发器“FUSION.T_REPLACETOTAL”时出错。

该错误告诉您,将其结果保存到变量中的查询将返回多个结果。因此,它不知道您要在变量中保存什么

尝试运行以下命令:

select iva_prod,id_prod from produto p where p.id_prod = id_prod;

我打赌它会给你不止一个结果,它不能保存到
iva,idprod

这个错误告诉你,一个将结果保存到变量中的查询返回了不止一个结果。因此,它不知道你想在变量中保存什么

尝试运行以下命令:

select iva_prod,id_prod from produto p where p.id_prod = id_prod;

我打赌它会给你不止一个结果,它无法保存到
iva,idprod
中。问题是,你试图从表中获取每一行,因为你正在将一列(id\u prod)与它自身相匹配。我怀疑你想使用:new.id\u prod或:old.id\u prod

select .... from produto p where p.id_prod = id_prod; 
接下来,将其设为BEFORE INSERT/UPDATE触发器,并将UPDATE语句替换为

 :new.prec_total_if := r_old * (1+(iva/100));

否则,您将得到一堆变化的表错误。

问题是,您试图从表中获取每一行,因为您正在将一列(id\u prod)与自身相匹配。我怀疑您希望使用:new.id\u prod或:old.id\u prod

select .... from produto p where p.id_prod = id_prod; 
接下来,将其设为BEFORE INSERT/UPDATE触发器,并将UPDATE语句替换为

 :new.prec_total_if := r_old * (1+(iva/100));
否则,您将得到一堆变异表错误