首页 > 解决方案 > Oracle:行级触发器将行插入表并更新另一个表的列

问题描述

我有三个具有以下列的表:

当将行插入 WorkingOn 表时,我正在尝试在 Oracle 中创建行级触发器。它将获取项目预算的总和并更新到员工正在处理的员工的 total_project_budget 中。

我当前的行级触发器:

CREATE OR REPLACE TRIGGER testtrigger
AFTER INSERT ON WorkingOn
FOR EACH ROW
  BEGIN
    UPDATE employee
    SET TOTAL_BUDGET = ( SELECT SUM(budget)
                         FROM project INNER JOIN workingon
                         ON project.project_id = workson.project_id
                         WHERE workingon.employee_id = employee.employee_id )
    WHERE employee_id = :NEW.employee_id;
  END;
/

如果我运行这个触发器,我会得到变异表,

ORA-04091: 表 user.WORKINGON 正在变异,触发器/函数可能看不到它

但是,如果我使用 AUTONOMOUS_TRANSACTION 运行,

ORA-06519: 检测到活动的自主事务并回滚

编辑:

澄清一下,WorkingOn: Employee_ID 引用 Employee.employee_ID,Project_ID 引用 Project.project_ID。

员工 -(1 到 1)-> WorkingOn -(1 到 *)-> 项目

标签: oraclerowdatabase-trigger

解决方案


我建议仅在项目表上使用 sum 如下:

CREATE OR REPLACE TRIGGER testtrigger
AFTER INSERT ON WorkingOn
FOR EACH ROW
  BEGIN
    UPDATE employee
    SET TOTAL_BUDGET = ( SELECT SUM(budget)
                         FROM project 
                        WHERE project.project_id = :NEW.project_id)
    WHERE employee_id = :NEW.employee_id;
  END;
/

干杯!!


推荐阅读