问题标签 [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.
sql - SQL:防止无效数据插入表的触发器
我有下表:
此表跟踪特定酒店的所有客房预订。我想编写一个触发器,以防止添加的预订与酒店特定房间的先前预订日期重叠。
例如,假设房间 5 当前在 2019 年 1 月 1 日至 2019 年 1 月 7 日期间预订。如果在 2018 年 12 月 26 日至 2019 年 1 月 3 日期间为房间 5 添加了另一个预订,我希望我的触发器阻止此数据添加到预订中桌子。如果在 2019 年 1 月 3 日至 2019 年 1 月 10 日以及 2019 年 1 月 2 日至 2019 年 1 月 6 日期间进行预订,则同样适用。
基本上预订开始和结束日期不能与同一酒店房间的其他预订开始和结束日期重叠。
这是我到目前为止所尝试的:
我收到一条错误消息,提示“表级触发器中不允许新或旧引用”。我知道如果我把它变成一个行级触发器,可能会抛出一个变异表错误。
谁能指出错误是什么?
干杯!
plsql - 复合触发器
问题 - 想要通过使用复合触发器来避免突变触发器的问题。但无法这样做
背景 - 每当主表“CUSTOM_ITEM”发生变化时,我想在新表“跟踪表”中插入数据
设计是这样的,每次在表中创建一行时,都会生成一个 ITEM_ID,但在某些情况下,有一列 FIRST_ITEM_ID 保持不变。
因此,每当添加新行时,我都想检查其 FIRST_ITEM_ID,然后检查整个表并找出具有相同 FIRST_ITEM_ID 的所有 ITEM_ID。
我想使用触发器在新表中插入所有这些行。
甚至可能吗?
连接触发器:
oracle - 如何使用触发器从同一个表中的另一个“父”记录继承值
我觉得这是甲骨文不想让我做的那些“如果你小心你就可以做到”的场景之一。
我的问题是我有一个配置表,我想通过触发器启用继承。考虑一个具有 SUPERVISOR ID 列的 Employee 表,如果 ID 更改,则“继承”的 SUPERVISOR NAME 会自行填充。
我想做一个简单的自我查找,以在 INS/UPD 时从另一行捕获一个值。但甲骨文拒绝作为变异触发器错误。
我的代码本质上是:
谢谢。
sql - 如果只有一个条目,则防止从表中删除
如果当时表中只有一个电话号码,我想防止删除电话号码。
到目前为止,我有这个触发器:
我收到错误 ORA-04091:表 TFNO_CLIENT 正在变异(...)
我理解这个问题,并且我尝试了几种替代方法:
Pragma 自治事务。这会导致故障,我想尽可能避免它。
而不是查询表本身,而是查询一个保存计数的视图:
然后我将查询更改为
这也不起作用。
有什么方法可以轻松解决这个问题吗?谢谢!
sql - SQL - 在更新表之前计算表中的行数
我在 Oracle SQL 上做一个大学项目,当我尝试更新表时,我不断收到错误“表 (...) 正在变异,触发器/函数可能看不到它”。我的partiteTeams表有 3 列(eventName varchar(), teamId number, teamPlace number)。
这里的目标是,当我在活动中更新给定团队的 teamPlace 时,该位置必须小于或等于同一活动中参与团队的数量。
我的触发器如下:
根据我的研究,这是因为我正在尝试读取调用触发器的同一张表。我也尝试将代码的选择部分导出到函数中,但问题仍然存在。
活动的参与者是团队本身,而不是组成这些团队的个人。示例:如果 A 队、B 队和 C 队参加了一项赛事 E,则同一赛事 E 的计数应为 3。
有小费吗?谢谢你。
oracle - 发生触发错误的位置 -oracle mutating error
在实时环境中,有一个用于授权交易的屏幕,在授权期间,表 T1 中的数据将被更新。该屏幕正常工作,突然用户告诉在授权期间抛出错误。ORA-04091: 表 schema.T1 正在变异,触发器/函数可能看不到它。而已。错误不会显示在哪个触发器发生错误。我在本地环境中测试过没有任何错误。我认为这将是一个数据问题,但如何识别它发生在哪个触发器中。我检查了 T1 的所有触发器,实际上这些触发器在发生此问题后工作了很长时间。通常错误会显示发生了哪个触发错误,但不会显示。是否可以追溯?
oracle - ORA-04091 表正在变异
我有以下 2 个表:运行:
和命令:
要求实现如下逻辑:当运行中的所有订单状态相同时,应更新运行状态(与其订单相同)。
例如,当order_id = 3
状态设置为时'finished'
,run_id=1
状态也应设置为'finished'
。与order_id = 4
将状态设置'active'
为时相同。run_id = 2 should
'active'
负责检查订单状态并相应更新运行状态的程序:
我已经创建了触发器
逻辑失败,因为错误:ORA-04091: table ORDERS is mutating, trigger/function may not see it
。触发器正在调用一个过程,该过程查询调用触发器的同一个表。
解决此类问题的最佳方法是什么?
oracle - ORA-04091 表 * 正在变异,触发器/函数可能看不到它
我正在开展一个向客户租船的项目,并根据他们输入的信息为他们提供一艘船。该项目的一个部分我想创建一个触发器,根据您乘船离开的时间与返回的时间计算天数,然后将钱退还给客户余额或收取额外费用。我的触发器设置是这样的-
如果它在这里也有帮助的话,那就是我拥有的与此触发器相关的两个表。
当我运行代码时,我收到此错误报告
这里到底有什么问题?这与我的触发器是“插入后”有关吗?提前致谢。
database - 触发选择子记录,乘以它们的值并更新父记录
我是一个 PL/SQL 新手,我正在为触发器而苦苦挣扎。
描述:
我有三个对象 - 产品、包含、订单。一个产品可以有多个 CONTAINS,一个 ORDER 可以有多个 CONTAINS(基本上它曾经是 PRODUCT 和 ORDER 之间的多对多关系)。
每个产品都有一个“值”列,每个包含有一个“金额”列,每个订单都有一个“总计”列。
当我通过创建新的 CONTAINS 将新产品添加到 ORDER 时,我想重新计算 ORDER 上的字段“总计”。
示例:产品 X 的“值”为 100。产品 Y 的“值”为 200。我们有一个 ORDER O。现在我在产品 X 和 ORDER O 之间创建 CONTAINS,列“数量”为 5。现在触发器应该乘以 5 * 100 并将 ORDER 列“total”更新为 500。然后我在 PRODUCT Y 和 ORDER O 之间创建 CONTAINS,列“amount”为 10。现在触发器应该重新计算 5 * 100 + 10 * 200 并更新“total”列订购 O 至 2500。
我的错误触发器:
编辑:错误显示在这里:
(SELECT SUM(VALUE) into product FROM PRODUCT WHERE ID_PRODUCT = :emp.PRODUCT_ID_PRODUCT)
说我不能使用“emp”。
EDIT2:错误消息:
10/2 PLS-00103:在预期以下情况之一时遇到符号“SELECT”:(-+ case mod new not null continue avg count current exists max min prior sql stddev sum variance execute forall merge time timestamp interval date pipe <an交替 10/89 PLS-00103:在预期以下情况之一时遇到符号“)”:。( * @ % & - + ; / at for mod remaining rem <an exponent (**)> and or group have intersect minus order start union where connect || indicator multiset 15/5 PLS-00103:遇到符号“LOOP”预期以下情况之一时:
plsql - 在触发器 PL/SQL 中调用存储过程
好吧,我正在尝试在触发器中调用存储过程。
我得到的错误
这是我的触发器代码:
这是我的存储过程:
这就是我尝试查看触发器是否正常工作的方式:
不知何故DBMS_OUTPUT.PUT_LINE
,我的触发器代码正在工作。但是存储过程会导致错误。