我有一个“ Employee
”表,该表包含名为“ E#
”和“ TOTAL_BUDGET
”的列。
我有一个“ WorkOn
”表,其中显示了员工正在处理的所有P#
。
我有一个“ Project
”表,该表包含名为“ Budget
”,“ 'E#'
”和“ P#
”的列。
我想做的是,每当将一个新项目分配给一名员工(例如,将新数据插入到WorkOn中)时,行触发器将更新 TOTAL_BUDGET 列,其中预算分配给员工的所有项目。
例如,如果当前已将员工1 分配给预算分别为 10K,15K和5K 的项目 1,2,3 将预算为 5K 的员工 1 的新项目 4 插入 WorkOn 表中,行触发器将更新员工 1 的
但是,我的行触发器当前所做的是,在更新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
,但是意识到我在修改变异表时无法执行此操作。可以使用行触发器来完成此任务吗?
任何帮助将不胜感激。谢谢。
答案 0 :(得分:1)
我认为您忘记了在更新员工表之前将新预算添加到当前预算中:
ngOnInit() {
let that = this;
setTimeout(() => {
that.loading = false;
console.log(that.loading);
}, 3000);
}
答案 1 :(得分:1)
由于从要插入触发器主体中的表中进行选择,所以您得到了变异表错误。您应该可以使用复合触发器来实现所需的功能。史蒂文·弗伊尔斯坦(Steven feuerstein)写了出色的blog,解释了如何使用触发器解决此类问题。