我在oracle上遇到触发器问题。
我有类似的东西:
Project
-------
currentProgress
plannedLoads
currentLoads
Step
----
currentProgress
plannedLoads
currentLoads
Task
----
currentProgress
plannedLoads
currentLoads
项目由Step和Step组成,由Task组成。
currentProgress总是= currentLoads / plannedLoads。
我在插入任务之前有一个触发器,在插入,更新或删除时改进Step currentLoads,在Step currentLoads上改进另一个以改进Project currentLoads。
如果我更新Task,则会调用两个触发器,一个用于更新Step,另一个用于Project。
例如,当我更新Step时,我会更新它的currentLoad。
问题是当我删除一个项目时。我必须删除与之相关的步骤和任务。因此调用Task上的触发器和删除步骤,调用Project上的触发器。
我不确定我是否清楚。如果没有,请问我详细信息。
感谢您的帮助。
答案 0 :(得分:1)
这听起来不像触发器的理想场景 - 它们最好用于额外的验证(即不能通过约束而不是约束来完成的事情)/日志/健全性检查等,而不是应用程序逻辑。
此外,我只会谨慎地使用触发器进行验证,并作为约束和应用程序验证的补充。
我强烈建议将维护这些记录的功能转移到PL / SQL过程中,并调用它而不是直接对表发出DML语句。这样,你就可以控制住。