2
3
4
5
6
7
8
9
10
11
12
13
CREATEORREPLACETRIGGERtr_del_emp
BEFOREDELETE--指定触发时机为删除操作前触发
ONscott.emp
FOREACH ROW--说明创建的是行级触发器
BEGIN
--将修改前数据插入到日志记录表del_emp ,以供监督使用。
INSERT INTO emp_his(deptno , empno, ename , job ,mgr , sal , comm , hiredate )
VALUES( :old.deptno, :old.empno, :old.ename , :old.job,
:old.mgr, :old.sal, :old.comm, :old.hiredate );
END;
DELETEempWHEREempno=7788;
DROPTABLEemp_his;
DROPTRIGGERdel_emp;
例 2:限制对 Departments 表修改(包括 INSERT,DELETE,UPDATE)的时间范围,即
不允许在非工作时间修改 departments 表。
1
2
3
4
5
6
7
8
CREATEORREPLACETRIGGERtr_dept_time
BEFOREINSERTORDELETEORUPDATE
ONdepartments
BEGIN
IF (TO_CHAR(sysdate,'DAY')IN('星期六','星期日'))
OR(TO_CHAR(sysdate,'HH24:MI')NOTBETWEEN'08:30'AND'18:00')
THEN
RAISE_APPLICATION_ERROR(-20001,'不是上班时间,不能修改 departments 表');
ENDIF;
END;
例 3:限定只对部门号为 80 的记录进行行触发器操作。
1
2
3
4
5
6
7
8
9
CREATEORREPLACETRIGGERtr_emp_sal_comm
BEFOREUPDATEOFsalary, commission_pct
ORDELETE
ONHR.employees
FOREACH ROW
WHEN(old.department_id = 80)
BEGIN
CASE
WHENUPDATING ('salary')THEN