触发器触发但值永远不会改变时的伪记录最佳实践
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;
如果您不包括它:
- 您必须更改触发器代码以明确命名您为其提供值的列,并且
- 你的日志table会显示某人的工资发生了变化,是谁干的,新旧值是多少,但你不会知道 的工资发生了变化。该列中的数据将为空。
Is the :new.employee_id syntax just good practice when creating triggers or unnecessary?
如果您希望在日志中包含此值 table,那么它是必需的。
考虑以下 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;
如果您不包括它:
- 您必须更改触发器代码以明确命名您为其提供值的列,并且
- 你的日志table会显示某人的工资发生了变化,是谁干的,新旧值是多少,但你不会知道 的工资发生了变化。该列中的数据将为空。
Is the :new.employee_id syntax just good practice when creating triggers or unnecessary?
如果您希望在日志中包含此值 table,那么它是必需的。