5)在任何方案上的DDL语句
2、触发条件(可选)CREATE [OR REPLACE] TRIGGER trigger_name timing event1 [OR event2 OR event3] ON table_name PL/SQL block;如上所示,trigger_name用于指定触发器名;timing用于指定触发时机(BEFORE或AFTER);event角于指定触发事件(INSERT,UPDATE和DELETE);table_name用于指定DML操作所对应的表名。
CREATE OR REPLACE TRIGGER tr_sec_emp
BEFORE INSERT OR UPDATE OR DELETE
ON emp
BEGIN
IF to_char(SYSDATE,‘D‘) IN (1,7) THEN
RAISE_APPLICATION_ERROR(-20001,‘不能在休息日改变雇员信息‘);
END IF;
END;2、使用条件谓词CREATE OR REPLACE TRIGGER tr_sec_emp
BEFORE INSERT OR UPDATE OR DELETE
ON emp
BEGIN
IF to_char(SYSDATE,‘D‘) IN (1,7) THEN
CASE
WHEN INSERTING THEN
RAISE_APPLICATION_ERROR(-20001,‘不能在休息日增加雇员‘);
WHEN DELETING THEN
RAISE_APPLICATION_ERROR(-20002,‘不能在休息日解雇雇员‘);
WHEN UPDATING THEN
RAISE_APPLICATION_ERROR(-20003,‘不能在休息日更新雇员‘);
END CASE;
END IF;
END;3、建立AFTER语句触发器CREATE TABLE tbl_audit( NAME VARCHAR2(20), ins INTEGER, upd INTEGER, del INTEGER, starttime DATE, endtime DATE );为了审计在EMP表上DML操作执行的次数、最早执行时间和最近执行时间,需要建立AFTER语句触发器。示例如下:
CREATE OR REPLACE TRIGGER tr_audit_emp
AFTER INSERT OR DELETE OR UPDATE
ON emp
DECLARE
v_temp INTEGER;
BEGIN
SELECT COUNT(*) INTO v_temp FROM tbl_audit WHERE NAME=‘EMP‘;
IF v_temp = 0 THEN
INSERT INTO tbl_audit(NAME,ins,upd,del,starttime)
VALUES (‘EMP‘,0,0,0,SYSDATE);
END IF;
CASE
WHEN INSERTING THEN
UPDATE tbl_audit SET ins = ins + 1,endtime = SYSDATE WHERE NAME = ‘EMP‘;
WHEN DELETING THEN
UPDATE tbl_audit SET del = del + 1,endtime = SYSDATE WHERE NAME = ‘EMP‘;
WHEN UPDATING THEN
UPDATE tbl_audit SET upd = upd + 1,endtime = SYSDATE WHERE NAME = ‘EMP‘;
END CASE;
END;测试:UPDATE emp SET sal = 888 WHERE empno = 7788; UPDATE emp SET sal = 999 WHERE empno = 1111; SELECT * FROM tbl_audit;
PL/SQL_触发器(触发器简介),布布扣,bubuko.com
原文:http://blog.csdn.net/com185272358/article/details/22097243