问题标签 [mutating-table]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
oracle - ORACLE 变异表错误在一个触发器中,但不是另一个;为什么?
好的,我有两个表 - ORDERS 和 ORDERLINES - 它们具有基本相同的问题,每个表都有触发器来解决问题。问题是除了具有表级唯一性的 PK 之外,在一个名为 RECID 的字段上,还有另一个字段 RECNO,它需要与另一个字段的关系是唯一的。
这些表与 FK 相关,如下所示:
ORDERS.WAREHOUSEID > WAREHOUSES.CUSTOMERID > CUSTOMERS
和
ORDERSLINES.ORDERID > ORDERS
OnORDERS
并且ORDERSLINES
我有BEFORE INSERT
触发器来分配特定于领域的唯一RECNO。
在ORDERS
中,RECNO需要在记录范围内是唯一的CUSTOMERS
。
在ORDERLINES
中,RECNO需要在记录范围内是唯一的ORDERS
。
触发器ORDERS
工作得很好。插入新订单时,会为其所属的客户 分配下一个唯一的RECNO 。
ORDERLINES
另一方面,应该在它所属的顺序内分配下一个唯一RECNO的触发器会抛出可怕的{ORA-04091: table ORDERLINES is mutating, trigger/function may not see it}异常。
这是有效的触发器:
这是不起作用的触发器:
有人可以解释为什么第一个有效,而第二个无效?有什么方法可以重写第二个以使其工作吗?
oracle - 我怎样才能从一个触发器的过程中修复这个变异表
此触发器会将插入的值传递给将这些值插入另一个表的过程。我收到一个变异表错误。我怎样才能解决这个问题?
oracle - 在更新触发器上获取更新条目的 ID - 变异表错误
我正在尝试创建一个更新触发器,但我一直遇到“变异表”错误。主要思想是一个带有用户评分的买卖数据库。基本上我想,每次更新 PRODUTOS 表上的评级时,重新计算卖家的评级。我正在尝试以下触发器(及其版本),但它无处可寻..
有人可以给我一个提示,我怎样才能只选择 ID_USER 值等于更新条目的 ID_USER 的条目?..提前致谢!
oracle - Oracle 触发器创建 - 表正在变异;触发器可能无法读取或修改它
由于表正在变异,因此以下触发器不起作用,因为我认为触发器中的 SQL 语句无法针对变异表执行,但是由于我不在 11g 上,因此我无法创建复合触发器。我已经尝试PRAGMA AUTONOMOUS TRANSACTION;
在声明部分包含在内,但是这不会编译。谁能给我最好的解决方案?
NB 简单来说,此触发器旨在阻止用户设置长度小于 3 个字符且不等于变量“format_name_”(如果长度小于 21 个字符)的用户 ID。
sql - Oracle SQL 触发器在实现时发生变异
此触发器在执行插入或更新操作时遇到问题。但是,触发器的创建没有错误。目的是检查 invoice_total 是否大于 payment_total + credit_total 的总和。任何帮助将非常感激:
sql - 移除变异触发器
我正在尝试创建一个触发器来计算服务日期和分支 ID。触发器的目的是计算分支机构 ID 的数量以及服务日期。如果计数大于 3,则触发器应该生效。然而,我遇到的问题是,oracle 已确定它是一个变异触发器,并且不允许插入带有错误消息的数据:
oracle - 变异触发预言机
我有两张桌子main
和hist
. main
每当其日期时间列被修改为hist
并将修改后的列重置main
为null
除一列时,我想从表中复制一行。但是我得到了变异触发错误。请帮忙。下面是两个触发器,
oracle - 使用同一张表进行验证
我的桌子:
因此,对于每个父级,子表中都有三个固定记录。而且,我需要放置一个验证块来限制用户更新子表中三个大于 100% 的子表中的任何一个的分配(对于任何给定的 parent_id)。
我添加了一个触发器来检查给定 parent_id 的分配总和,如果它大于 100%,则引发异常。然而,这导致了一个变异问题。克服此问题的任何设计改进/建议或实现此问题的任何替代方案。
PS:应用拦截oracle异常,并在应用中翻译成红条错误信息;因此必须使用 RAISE_APPLICATION_ERROR 来显示错误消息。
编辑 1:
这里的问题是应用层,它允许在列表屏幕上进行编辑。可以一次更新多个记录,因此子表上的触发器将被多次触发。在每个触发器实例中,我们还需要检查其他孩子的分配,这会导致变异问题。
sql - 触发避免变异表和更新:new.values
我有一张像这样的小桌子
而且我需要创建触发器(或触发器),这将允许以下规则起作用:
- 1 如果组中有超过 10 个名称,如果有人试图为该组插入下一个人,我需要引发错误。
- 2 如果 INSERT 带有组字段的 NULL 值,我需要将其分配给计数小于 10 的组。 - 3 如果所有组
中有 10 个名称,我需要生成下一个组号。
- 4 我需要避免变异表错误。
这是我到目前为止所做的:
上面的代码有效,但是当我从镜像表中选择插入时,例如
INSERT INTO people(name) select concat(name,'_next') from people_mirror;
结果是它超过了组的给定限制 (10)。我也知道使用PRAGMA AUTONOMOUS_TRANSACTION不是避免变异表错误的最佳方法,而且我知道如果我将行触发器拆分为语句触发器,我可以实现此功能,但我只是不知道如何获得它。
那么有人吗?;)
提前致谢。
- - - - - - - - - -编辑 - - - - - - - - - - - -
这些是有效的触发器,但我仍然对它们有疑问,因为它们都是 BEFORE 和行类型。
因为太长了,我无法将其粘贴为@TonyAndrews 答案的评论。