触发器中OLD 和 NEW修饰词,old 代表变更前记录,new代表变更后的记录。
CREATE OR REPLACE TRIGGER derive_commission_pct
BEFORE INSERT OR UPDATE OF salary ON employees
FOR EACH ROW
WHEN (NEW.job_id = 'SA_REP')
BEGIN
IF INSERTING
THEN :NEW.commission_pct := 0; --给:NEW.commission_pct赋值
ELSIF :OLD.commission_pct IS NULL
THEN :NEW.commission_pct := 0;
ELSE
:NEW.commission_pct := :OLD.commission_pct + 0.05;
END IF;
END;
说明:
1、这两个变量只有在使用了关键字 "FOR EACH ROW"时才存在.且update语句两个都有,而insert只有:new ,delect 只有:old。
2、可以使用WHEN限制 Trigger的触发条件。
3、NEW的赋值动作,想一想,如果是After类型的Trigger, 还允许对:NEW赋值吗? 没有