简短的问题,因为我不知道如何搜索这个。我可以“重新更新”同一行吗?例如,我有一个存储付款小计的字段,考虑到我的业务限制,我可以更新该值。我可以只用触发器来更新同一行的总数吗?先谢谢你了!
顺便说一句,我正在使用Oracle和PL / SQL。
业务规则:我有以下内容。有一个表可以存储将支付数据,另一个表存储要支付的月费,另一个表存储可能的折扣。一个人付费只能打折一次,并且会支付商店的小计和总额。所以,我正在做的是......“当贴现信息被更新时,在提交后,更新总价值和费用的价值”。
答案 0 :(得分:4)
您无法更新触发器触发的表,您将收到ORA-04091变异表错误。您可以使用:NEW
语法更新行本身的值,只要它是'之前'触发器。
我不清楚你对小计的意思;听起来你在桌子上有一个正在运行的总场;如果那是基于同一个表上的其他记录(例如,您有相同订单的多个记录,并且您希望插入的记录具有所有先前记录的总和)。如果是这种情况那么你也不能这样做,因为你打了同样的ORA-04901。
如果您正在更新行,则可以通过设置:NEW.subtotal := :OLD.subtotal - :OLD.value + :NEW.value
来调整字段,但不确定该字段的好处是什么。
了解您的业务逻辑是什么以及它如何适应插入/更新以及您希望触发器执行什么将会很有帮助。通常使用这样的东西你真的想在插入/更新周围使用包装程序,而不是触发器,但目前它有点模糊。
为了使小计保持准确,我可能会避免尝试维护它,而是使用具有分析函数的视图为您计算它。根据我的经验,麻烦少得多。
答案 1 :(得分:1)
是 - BEFORE INSERT for each row
触发器可以修改插入的值。