行级触发器:
当触发器被触发时,要使用被插入、更新或删除的记录中的列值,有时要使用操作前、后列的值.
:NEW 修饰符访问操作完成后列的值
:OLD 修饰符访问操作完成前列的值
例1: 建立一个触发器,当职工表 emp 表被删除一条记录时,把被删除记录写到职工表删除日志表中去。
-
@H_502_14@1
@H_502_14@2
@H_502_14@3
@H_502_14@4
@H_502_14@5
@H_502_14@6
@H_502_14@7
@H_502_14@8
@H_502_14@9
@H_502_14@10
@H_502_14@11
@H_502_14@12
@H_502_14@13
@H_502_14@14
-
@H_502_14@1
@H_502_14@2
@H_502_14@3
@H_502_14@4
@H_502_14@5
@H_502_14@6
@H_502_14@7
@H_502_14@8
@H_502_14@9
@H_502_14@10
@H_502_14@11
@H_502_14@12
@H_502_14@13
@H_502_14@14
例2:限制对Departments表修改(包括INSERT,DELETE,UPDATE)的时间范围,即不允许在非工作时间修改departments表。
TRIGGER tr_dept_time DELETE UPDATE ON departments BEGIN IF (TO_CHAR(sysdate,' DAY ' ) IN ( ' 星期六 ',0); Box-sizing: border-Box;">' 星期日 ' )) OR (TO_CHAR(sysdate,0); Box-sizing: border-Box;">' HH24:MI ' ) NOT BETWEEN ' 08:30 ' AND ' 18:00 ' ) THEN RAISE_APPLICATION_ERROR( - 20001,0); Box-sizing: border-Box;">' 不是上班时间,不能修改departments表 ' ); END IF ; END ;例3:限定只对部门号为80的记录进行行触发器操作。
-
@H_502_14@1
@H_502_14@2
@H_502_14@3
@H_502_14@4
@H_502_14@5
@H_502_14@6
@H_502_14@7
@H_502_14@8
@H_502_14@9
@H_502_14@10
@H_502_14@11
@H_502_14@12
@H_502_14@13
@H_502_14@14
@H_502_14@15
@H_502_14@16
@H_502_14@17
@H_502_14@18
@H_502_14@19
@H_502_14@20
@H_502_14@21
@H_502_14@22
/*
实例:
UPDATE employees SET salary = 8000 WHERE employee_id = 177;
DELETE FROM employees WHERE employee_id in (177,170);
*/
例4: 利用行触发器实现级联更新。在修改了主表 regions 中的 region_id 之后( AFTER ),级联的、自动的更新子表 countries 表中原来在该地区的国家的 region_id 。
-
@H_502_14@1
@H_502_14@2
@H_502_14@3
@H_502_14@4
@H_502_14@5
@H_502_14@6
@H_502_14@7
@H_502_14@8
@H_502_14@9
@H_502_14@10
例5:在触发器中调用过程。