Oracle触发器的类型及其功能简介(oracle触发器类型)

Oracle触发器(Trigger)是ORACLE数据库的一种特殊对象,它能够捕获或记录与表有关的操作,从而帮助管理数据库,保证数据库安全。简而言之,Oracle触发器可以被定义成一种表达式,当满足这些表达式的条件时,触发器就会执行相应的定义的动作。

Oracle触发器主要有3种类型:行触发器、状态触发器、表触发器。

行触发器用来监视表中特定行上是否发生某个INSERT、UPDATE或DELETE操作,如果满足一切条件,就会调用所关联的模块执行必要的动作。

例如,有一个表名为Salary,列名为money,现在要求用户每次INSERT或UPDATE表中money列时,都要求金额要大于1000,那么可以通过下面的行触发器实现:

CREATE OR REPLACE TRIGGER CheckMoney

BEFORE INSERT OR UPDATE OF money ON Salary

FOR EACH ROW

DECLARE

BEGIN

IF :new.money

RAISE_APPLICATION_ERROR(-20000,’金额不能小于1000′);

END IF;

END;

/

状态触发器和行触发器类似,只不过它不是针对某一行,而是针对整个表,当表中某些指定列的值改变(INSERT,UPDATE或DELETE)时,触发所关联的模块执行必要的动作。

例如,有一个表名为Deparment,当这个表中的某一行的is_stop字段的值变为Y时,就要执行停止该部门的动作,可以通过下面的状态触发器实现:

CREATE OR REPLACE TRIGGER StopDepartment

AFTER UPDATE OF is_stop on Department

FOR EACH ROW

DECLARE

BEGIN

IF :new.is_stop = ‘Y’ THEN

StopDeparment(:new.Department_id);

END IF;

END;

/

表触发器是用来记录表上的变更情况,比如改动表结构,增加列,删除列,修改列名等等,只要发生了这些变动,Oracle就会触发这个表触发器。

例如,有一个表名为Employee,当用户修改了该表结构,即增加或删除了列,马上就要把这个信息记录下来,可以通过下面的表触发器实现:

CREATE OR REPLACE TRIGGER LogAlterTable

AFTER ALTER ON Employee

BEGIN

INSERT INTO LOG_TABLE (CHANGE_TYPE,TABLE_NAME)

VALUES (‘ALTER’, ‘Employee’);

END;

/

总的来说,Oracle的触发器有3类,行触发器、状态触发器、表触发器,它们都能帮助用户处理表和数据的变更,保证数据的正确性和安全性。


数据运维技术 » Oracle触发器的类型及其功能简介(oracle触发器类型)