Oracle触发器类型:全面了解(oracle触发器类型)
Oracle触发器是表中特殊的存储程序,用于根据定义的条件自动执行SQL命令或者做其它记录。目前Oracle支持四类触发器:表级触发器、行级触发器、数据库级触发器和环境触发器。
首先介绍表级触发器,它用于需要对某个表上面的某个操作做出响应,比如修改、插入或者删除表中的数据时。它会在表上面的每次改变被触发时执行程序,它有两种类型:BEFORE触发器和AFTER触发器,前者在操作执行前被触发,后者在操作执行后被触发。表示示例如下:
CREATE OR REPLACE TRIGGER trig1
BEFORE INSERT ON
EMP FOR EACH ROW
DECLARE
v_salary NUMBER;
BEGIN
SELECT salary INTO v_salary FROM salary_table WHERE empno = :new.empno;
IF v_salary > 3000 THEN
RAISE_APPLICATION_ERROR(-20001,’The salary of the new employee is too large!’);
END IF;
END;
/
其次介绍行级触发器,它在改变某行数据时被触发。它像表级触发器一样,也有BEFORE触发器和AFTER触发器,但是有两个关键字FOR EACH ROW,这表示它会对每条变化的行数据分别进行操作,例如:
CREATE OR REPLACE TRIGGER trig2
BEFORE INSERT ON EMP
FOR EACH ROW
BEGIN
IF inserting THEN
IF :NEW.deptno = 10 THEN
:NEW.job := ‘MANAGER’;
ELSE
:NEW.job := ‘CLERK’;
END IF;
END IF;
END;
/
第三种触发器类型是数据库级触发器,它可以对整个数据库的变化做出响应。它有AFTER类型,处理数据库发生的任何事件,像在数据库启动时执行某些操作、系统崩溃时处理日志等。它有几个选项来控制触发器被调用,比如It’s triggered “ON SERVERERROR”表示当数据库出现任何错误时,该触发器就会被调用:
CREATE OR REPLACE TRIGGER trig3
AFTER SERVERERROR ON DATABASE
BEGIN
INSERT INTO log_table VALUES(sysdate,’Error Occurred!’);
END;
最后介绍环境触发器,它可以监视事件队列中时间的变化,当某些事情发生时被触发,它的实现还需要创建数据库对象,可以把某些服务添加到事件里面后再进行监控:
CREATE OR REPLACE TRIGGER trig4
AFTER LOGON ON SCHEMA
BEGIN
INSERT INTO log_table VALUES(sysdate,’User logged in!’);
END;
总的来说,Oracle的触发器有四种类型,它们都可以满足不同的需求,在一些特殊情况下可以大大简化我们的开发工作,有效地处理事件和保持数据安全。