触发器触发但值永远不会改变时的伪记录最佳实践

Pseudorecord best practice when trigger fires but value should never change

考虑以下 tables 和触发器,是否需要在插入语句中指定 :new.employee_id 或者这通常被认为是最佳实践。触发器只会在 table 的薪水列上触发,employee_id 不应受到影响。 :new.employee_id 语法是创建触发器时的好习惯还是不必要的?如果不添加,会不会有潜在问题?

Link 致 Oracle HR SCHEMA 员工 table Employees Table HR Schema

CREATE TABLE salary_log (
    whodidit VARCHAR2(25), whendidit timestamp,
    oldsalary NUMBER,
    newsalary NUMBER,
    emp_affected NUMBER);
    
    CREATE OR REPLACE TRIGGER saltrig
        AFTER INSERT OR UPDATE OF salary ON employees
        FOR EACH ROW 
        BEGIN
        INSERT INTO salary_log
        VALUES(user,sysdate, :old.salary, :new.salary, :new.employee_id);
        END;

如果您不包括它:

  1. 您必须更改触发器代码以明确命名您为其提供值的列,并且
  2. 你的日志table会显示某人的工资发生了变化,是谁干的,新旧值是多少,但你不会知道 的工资发生了变化。该列中的数据将为空。

Is the :new.employee_id syntax just good practice when creating triggers or unnecessary?

如果您希望在日志中包含此值 table,那么它是必需的。