Gra*_*amA 33
您通常使用的条款的触发 使用:old引用旧值,:new以引用新的价值.
以下是与上面链接的Oracle文档中的示例
CREATE OR REPLACE TRIGGER Print_salary_changes
BEFORE DELETE OR INSERT OR UPDATE ON Emp_tab
FOR EACH ROW
WHEN (new.Empno > 0)
DECLARE
sal_diff number;
BEGIN
sal_diff := :new.sal - :old.sal;
dbms_output.put('Old salary: ' || :old.sal);
dbms_output.put(' New salary: ' || :new.sal);
dbms_output.put_line(' Difference ' || sal_diff);
END;
Run Code Online (Sandbox Code Playgroud)
在此示例中,触发器触发BEFORE DELETE OR INSERT OR UPDATE :old.sal将包含触发器触发之前的工资,:new.sal并将包含新值.
Gok*_*Gok 19
:新值和:旧值可以在DML语句中区分.
Insert - :Old = NULL :New =插入新值
更新 - :Old =在Update语句之前存在于表中的值Triggered :New =给予Update更新的新值
删除 - :旧 =删除前的值 :新 = NULL
小智 7
:old和:new是在使用行级触发器时引用访问行级数据的伪记录.
对于以下操作,各自的旧值和新值:
例如:
CREATE OR REPLACE TRIGGER get_dept
BEFORE DELETE OR INSERT OR UPDATE ON employees
FOR EACH ROW
BEGIN
DBMS_OUTPUT.PUT('Old Dept= ' || :OLD.dept|| ', ');
DBMS_OUTPUT.PUT('New Dept= ' || :NEW.dept );
END;
Run Code Online (Sandbox Code Playgroud)
触发声明:
UPDATE employees
SET dept ='Accounts'
WHERE empno IN (101 ,105);
Run Code Online (Sandbox Code Playgroud)