Oracle数据库中触发器类型探究(oracle触发器类型)
Oracle数据库中触发器是在满足指定的条件时,执行一系列的封装的 SQL 语句的对象。它的执行机制和其他 对象,如存储过程 (procedures) 和函数 (functions) 的执行机制是一致的。从 Oracle 10g 开始,用户可以定义多种行为的触发器,这些触发器的类型都有着不同的性质和应用范围,主要有以下几种类型:
1.BEFORE 触发器:它会在对应表上指定操作发生前执行,例如一条 INSERT 、UPDATE等DML 语句运行之前,用户可以建立一个 BEFORE 触发器,在该触发器中可以对要改变的记录进行校验,以确认该事务是否能够执行。
例如,创建数据表employee,并创建一个BEFORE触发器:
“`sql
CREATE TABLE employee
( ID NUMBER NOT NULL,
EmpName VARCHAR2(50),
Emp_Age VARCHAR2(20),
Emp_Dept VARCHAR2(50)
)
CREATE OR REPLACE TRIGGER trig_control_emp_age
BEFORE INSERT OR DELETE OR UPDATE
on employee
FOR EACH ROW
BEGIN
IF :new.Emp_Age 55 THEN
RAISE_APPLICATION_ERROR(‘年龄必须在16-55范围内’);
END IF;
END;
2.AFTER触发器:它和BEFORE触发器的处理基本一致,只是在指定的操作发生后执行,用以完成一些额外操作。
例如,建立一个AFTER触发器,当employee表中某条记录发生变更时,记录变更时间:
```sqlCREATE OR REPLACE TRIGGER trig_update
AFTER INSERT OR DELETE OR UPDATE on employee
FOR EACH ROW BEGIN
:new.Emp_Update_Time := SYSDATE; END;
3.INSTEAD OF 触发器:它是Oracle10 g及以上版本才支持的类型,它的作用是在触发器前发生,用于针对视图的操作,该视图一般为非直接可改变数据的视图。
例如,创建一个INSTEAD OF触发器,它拦截对视图emp_salary_view操作,将更改赋值给对应的表:
“`sql
CREATE OR REPLACE TRIGGER trig_empty_password
INSTEAD OF INSERT OR DELETE OR UPDATE
on emp_salary_view
FOR EACH ROW
BEGIN
IF INSERTING THEN
INSERT INTO employee VALUES (emp_ID,EMPLOYEE_NAME,EMP_AGE,EMP_DEPT,EMP_SALARY);
ELSIF UPDATING THEN
UPDATE employee SET Emp_Salary=ROUND(:new.Emp_Salary,2)
WHERE EMP_ID=:new.Emp_ID ;
END IF;
END;
综上所述,触发器是Oracle数据库中非常重要的功能,用户可以根据自身的不同的实际应用场景来择时合理使用不同的触发器类型,以便能够更好地管理和实现不同的功能需求。