考虑表TRADE_ORDERS
。
Symbol | Type | Count | Settled | Settled_count
------ | -----| ------| --------| -------------
Apple | BUY | 100 | NO | 0
Apple | BUY | 50 | NO | 0
我已经写了一个触发器after_trade_orders_insert
,新行的AFTER INSERT
会尝试解决以前的订单,具体取决于是否有未结算的订单。
现在,如果我INSERT
进入TRADE_ORDERS
值为Apple, SELL, 150
的行,则应该结算所有已购买的股票。因此,预期的行动应该使表格处于以下状态。
预期输出
Symbol | Type | Count | Settled | Settled_count
------ | -----| ------| --------| -------------
Apple | BUY | 100 | YES | 100
Apple | BUY | 50 | YES | 50
Apple | SELL | 150 | YES | 150
我理解如何在mysql中编写代码来实现。但是当我在after_trade_orders_insert
中编写代码时,它会失败并显示错误
错误代码:1442。无法更新存储函数/触发器中的表'NSE_FO',因为它已被调用此存储函数/触发器的语句使用。 0.055秒
我理解这个错误是什么以及它为什么会发生。
问题:如何实现预期输出?
答案 0 :(得分:0)
您无法通过触发器更新表格中最近插入的行,因此您必须将where子句与 new 关键字一起使用。
答案 1 :(得分:0)
我们无法做我们想做的事情 - 触发器/存储过程无法更新与该行相同的表的另一行,从中调用触发器。
如何实现呢? 来自此thread
的接受答案这样做的典型方法是创建一个存储过程 插入/更新目标表,然后更新其他行, 所有在交易中。