创建计算每个新插入员工的总工资的行级触发器

Posted

技术标签:

【中文标题】创建计算每个新插入员工的总工资的行级触发器【英文标题】:Create row level trigger that computes the total salary for each newly inserted employee 【发布时间】:2015-12-03 19:45:54 【问题描述】:

我需要创建一个行级触发器来计算每个新插入的员工的总薪水 - 在插入之前和更新薪水或奖金字段之前触发。我还需要使用 :NEW 字段来存储数据。

到目前为止我有:我真的不知道如何显示总工资,我相信我设置了正确的开始,只是不确定 FOR EACH ROW WHEN 之后的其余部分

CREATE OR REPLACE TRIGGER 
TRG_Step3_TotSalary
BEFORE UPDATE OF salary, bonus ON Lab12_Employees
FOR EACH ROW WHEN (Salary + Bonus = :NEW.TotalSalary);
BEGIN 
INSERT :NEW.Salary + bonus
DBMS_OUTPUT.PUT_LINE('New Salary =' || (:NEW.TotalSalary);

【问题讨论】:

为什么你需要WHEN 你不需要更新任何薪水或奖金的变化吗?所以只需FOR EACH ROW 嗯,是的,我可以进行更新我只是担心更新更新 - 并获得递归触发器 【参考方案1】:

未经测试,但我相信以下应该可以工作

CREATE OR REPLACE TRIGGER 
TRG_Step3_TotSalary
BEFORE UPDATE OF salary, bonus ON Lab12_Employees
FOR EACH ROW 
BEGIN 
  :NEW.TotalSalary := :NEW.Salary + bonus
  DBMS_OUTPUT.PUT_LINE('New Salary =' || (:NEW.TotalSalary);
END

【讨论】:

是的,这不起作用:/开始语句中的语法错误呃 错误是什么?我认为我们将需要 :NEW.bonus 而不仅仅是在开始后的第一行中添加奖金,但错误消息将有助于澄清 缺少半冒号 :NEW.TotalSalary := :NEW.Salary + bonus 应该是 :NEW.TotalSalary := :NEW.Salary + bonus;

以上是关于创建计算每个新插入员工的总工资的行级触发器的主要内容,如果未能解决你的问题,请参考以下文章

在插入新记录之前触发检查部门的平均工资

范围触发器 - 员工工资

T-SQL:计算员工的总工资

oracle如何创建行级触发器?

SQL Server 触发器:更新查询新旧数据

在插入表之前创建触发器