精深Oracle触发器:究竟有几种类型?(oracle触发器类型)
Oracle触发器是Oracle数据库中中高级存储结构,触发器是一种特殊的关系数据库触发器,它用于在相关数据发生变化时,执行一个或多个动作。它是一个与表密切相关的存储过程,在指定的事件发生时被调用。简单来说,它可以让你要求数据库在用户对表中的数据进行了操作之后,再做一些事。本文将介绍Oracle触发器的类型及其如何构建。
Oracle触发器分为三种:行触发器,表触发器和系统触发器。
行触发器,也称作行级触发器,用于在表中某一行数据发生改变时执行动作。换句话说,行触发器是在数据库中涉及到某一行数据时,产生一个动作的对象。此类触发器会在语句执行完毕后立即生效,其响应时间迅速。可以看出,行触发器是Oracle中最常用的触发器类型。
下面是一个例子,当一个员工的薪水发生变化时,在触发器中定义一个动作,即将薪水的变化写入日志表中。
CREATE OR REPLACE TRIGGER salary_trg
AFTER UPDATE OF salary ON employees
FOR EACH ROW
BEGIN
INSERT INTO salary_log(EMPLOYEE_ID,PREVIOUS_SALARY,NEW_SALARY)
VALUES(:OLD.EMPLOYEE_ID,:OLD.SALARY,:NEW.SALARY);
END;
表触发器是针对整个表所定义的触发器,当表中所有数据发生变化时都会触发动作。换句话说,当有任何操作(增、删、改)时,此类触发器会被激活。表触发器通常在初始化、审计表或日志表中使用。
下面是一个例子,当发生在员工表的任何变化时,在触发器中定义一个动作,写入日志表中:
CREATE OR REPLACE TRIGGER employees_trg
AFTER INSERT OR DELETE OR UPDATE OF EMPLOYEE_ID ON employees
FOR EACH ROW
BEGIN
INSERT INTO employees_log(EMPLOYEE_ID,OPERATION)
VALUES(:OLD.EMPLOYEE_ID,’Insert’,’Update’,’Delete’);
END;
最后是Oracle系统触发器,当表空间中可用空间减少到一定程度时,就会触发系统触发器。系统触发器可以用于自动释放表空间,以及执行其他相关操作,例如审计工作和管理工作。
在这里有一个例子:当表空间空间可用量小于10%时,触发器就会释放表的空间。
CREATE OR REPLACE TRIGGER free_space_trg
AFTER LOGON ON database
BEGIN
IF (SELECT free_space FROM dba_tablespaces WHERE TABLESPACE_NAME = ‘TBS_01’)
EXECUTE IMMEDIATE ‘ALTER TABLESPACE TBS_01 BIGFILE’;
END IF;
END;
以上就是Oracle触发器的三种类型。他们的特点各异,有的可以针对表中的某一行触发,也有的可以针对整个表操作,还有的可以当表空间到一定程度时触发。只有了解清楚具体类型,才能正确构建Oracle触发器。