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的触发器有四种类型,它们都可以满足不同的需求,在一些特殊情况下可以大大简化我们的开发工作,有效地处理事件和保持数据安全。


数据运维技术 » Oracle触发器类型:全面了解(oracle触发器类型)