oracle - 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;
解决方案
好吧,那是行不通的。您正在从正在更新的同一个表中进行选择,这使得表mutating。我们缺少一些关于它到底是什么的更多信息(例如,表包含多少行,每个SWID
和SELF_ID
;它们的关系是什么;您是否真的应该将该值存储到表中(或者您可以在需要时计算它)?
有一种方法可以“修复”变异表错误。如今,它是启用它的复合触发器。在以前的 Oracle 数据库版本中,您将使用类型 + 包解决方案(在 Internet 上搜索示例)。
不过,我建议你考虑一下。变异表错误通常(但不总是)意味着你做错了。如果可能,改变流程。
推荐阅读
- r - 解析 data.frame 中的单列 XML
- sitecore - 发布后在 Sitecore 内容编辑器中解锁项目
- python - Pandas - 计算项目的总数量并删除总数量小于 5 的唯一值
- excel - 键入在不同单元格中创建数值的单词
- java - Spring Boot 集成测试 - 我应该在 @ContextConfiguration 中输入什么参数
- google-chrome - 检测 Google Chrome 实时字幕
- python - 如何理解 py-spy 的分析报告?
- jwt - Quarkus:集成测试 - 如何模拟 OIDC?
- angular - RROR 错误:找不到带有路径的控件:formArray
- python - 如何使用 python 或 pyspark 获取带有年份的周数列表(此格式为 202114)