首页 > 解决方案 > Oracle 18 c trigger error sql ; 执行触发器时出错

问题描述

表格与自身相关 一个积极的进场运动和一个消极的退出运动将所有的积极运动与其所有的消极运动联系起来 每一个新的添加我想要总计积极运动的所有负面运动

错误信息 当我尝试向表中输入新值时,触发器中出现错误,即使在执行触发器'AMMAR.ITEMS_MOVE_DETAILl_TRIGGER 期间SQL 语句错误中没有错误,我也不知道原因

create or replace trigger ITEMS_MOVE_DETAIL1_trigger
  after insert 
  on ITEMS_MOVE_DETAIL1 
  for each row
declare
 sumqu float;
begin
 
select sum(quantity) 

into sumqu
from ITEMS_MOVE_DETAIL1
 where self_id = :new.self_id;


update  ITEMS_MOVE_DETAIL1
  set drawn_quantity = sumqu
   where swid = :new.self_id;
  

end ITEMS_MOVE_DETAIL1_trigger;

标签: oracleplsql

解决方案


好吧,那是行不通的。您正在从正在更新的同一个表中进行选择,这使得表mutating。我们缺少一些关于它到底是什么的更多信息(例如,表包含多少行,每个SWIDSELF_ID;它们的关系是什么;您是否真的应该将该值存储到表中(或者您可以在需要时计算它)?

有一种方法可以“修复”变异表错误。如今,它是启用它的复合触发器。在以前的 Oracle 数据库版本中,您将使用类型 + 包解决方案(在 Internet 上搜索示例)。

不过,我建议你考虑一下。变异表错误通常(但不总是)意味着你做错了。如果可能,改变流程。


推荐阅读