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类,行触发器、状态触发器、表触发器,它们都能帮助用户处理表和数据的变更,保证数据的正确性和安全性。