Oracle数据库触发器类型详解(oracle触发器类型)
Oracle数据库中,触发器是以SQL或者PL/SQL语句实现特定功能的对象,它可以智能地处理表中发生的特定事件,处理后驱动特定的操作。除了普通的触发器之外,Oracle数据库还提供了多种类型的触发器,下面介绍几种常见的触发器类型,并配合说明如何使用它们。
**1. BEFORE 触发器**
BEFORE 触发器是在指定的表DML操作被执行之前被引起执行,它可以拦截SQL语句,并会在拦截到的事件之前执行,示例:
“`SQL
CREATE OR REPLACE TRIGGER trg_before_update
BEFORE UPDATE ON employee
FOR EACH ROW
BEGIN
IF :new.sales
RAISE_APPLICATION_ERROR(-20001,’月销售额不可以减少’);
END;
/
**2. INSTEAD OF 触发器**
INSTEAD OF 触发器能够用来替换某种视图的更新操作,将它们转换成对其所基础的表进行的操作,示例:
```SQLCREATE OR REPLACE TRIGGER trg_instead_of_delete
INSTEAD OF DELETE ON employee_view FOR EACH ROW
BEGIN DELETE FROM employee
WHERE id = :old.ID;END;
/```
**3. AFTER 触发器**
这种触发器会在指定表的DML操作完成之后引起执行,FLASHBACK特性将记录更新操作之前的更新内容, 示例:
```SQLCREATE OR REPLACE TRIGGER trg_after_update
AFTER DELETE ON employee FOR EACH ROW
DECLAREBEGIN
INSERT INTO employee_history(id,name,salary,sales) VALUES (:old.id, :old.name,
:old.salary,:old.sales);END;
/
**4. COMPOUND触发器**
COMPOUND 触发器能够定义多个事件列出,能够提高系统响应速度,示例:
“`SQL
CREATE OR REPLACE TRIGGER trg_compound
BEFORE DELETE OR UPDATE
ON employee
FOR EACH ROW
DECLARE
BEGIN
— 执行DML操作
END;
/
**5. LOGON触发器**
这种触发器能够在用户登录系统时执行,可以作为系统检测步骤,例如检查危险的授权,示例:
```SQLCREATE OR REPLACE TRIGGER trg_logon
AFTER LOGON ON DATABASE BEGIN
IF(has_role('SYSDBA')) THEN RAISE_APPLICATION_ERROR(-20000,'拒绝SYSDBA授权');
END; /
以上就是Oracle数据库中触发器的几种类型及其示例,触发器是一种非常有用的对象。它能够提高系统的处理性能,这需要用户在设计上考虑是否需要使用它实现某些应用效果。