【问题标题】:Trigger which will change other table on update触发器将在更新时更改其他表
【发布时间】:2017-05-30 20:14:19
【问题描述】:

我的目标是创建触发器,如果​​ Task 更新,它将更新 Project 中的值。每个任务都有一个估计时间,项目有存储平均估计时间的列。我想要的是,如果更新了一项任务的估计时间,触发器将改变项目的平均时间。

我不知道怎么做,我想出了下面的代码,但它不起作用。

CREATE OR REPLACE TRIGGER trig_task_update
AFTER update
ON Task
FOR EACH ROW
BEGIN
  UPDATE Project p SET (avg_task_estimated_time) = (SELECT AVG(estimatedTime) FROM TASK t WHERE t.project_idProject= p.idProject) WHERE p.idProject = :NEW.project_idProject;
END;
/

更新表 TASK 后,我收到错误:

ORA-04091: table TASK is mutating, trigger/function may not see it

【问题讨论】:

  • 你能发布错误吗?一些示例数据和您的表结构也可能有所帮助。

标签: sql oracle triggers


【解决方案1】:

您无法查询触发代码的表(在行级触发器)。解决方法示例:https://stackoverflow.com/questions/5805986/oracle-after-delete-trigger-how-to-avoid-mutating-table-ora-04091

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多