【发布时间】:2019-11-12 18:12:34
【问题描述】:
我有一个“Employee”表,其中包含名为“E#”和“TOTAL_BUDGET”的列。
我有一个“WorkOn”表,其中显示员工正在处理的所有P#。
我有一个“Project”表,其中包含名为“Budget”、'E#' 和“P#”的列。
我想要做的是,每当一个新项目分配给员工(例如插入 WorkOn 的新数据)时,行触发器将 更新 >TOTAL_BUDGET 列,其中包含员工分配到的所有项目的预算。
例如,如果员工 1 当前分配到项目 1,2,3,预算分别为 10K、15K 和 5K,则将员工 1 的预算为 5K 的新项目 4 插入到 WorkOn 表中,行触发器将更新 TOTAL_BUDGET 员工 1 到 35K。
但是,我的行触发器目前所做的是它总是在更新 TOTAL_BUDGET 列之前排除新分配的项目预算(使用上面的示例,TOTAL_BUDGET 只有 30K)。
这是我到目前为止所做的:
CREATE OR REPLACE TRIGGER update_budget
BEFORE INSERT on WorkOn
FOR EACH ROW
DECLARE
budget number;
BEGIN
SELECT SUM(Project.Budget) INTO budget
FROM WorkOn
INNER JOIN Project
ON WorkOn.P# = Project.P#
WHERE E# = :NEW.E#;
UPDATE Employee
SET Total_Budget = budget WHERE E# = :NEW.E#;
END;
我尝试将 BEFORE INSERT 更改为 AFTER INSERT 但意识到我无法做到这一点,因为我正在修改一个变异表。是否可以使用行触发器来完成此任务?
任何帮助将不胜感激。谢谢。
【问题讨论】:
标签: oracle plsql database-trigger