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 触发器能够用来替换某种视图的更新操作,将它们转换成对其所基础的表进行的操作,示例:

```SQL
CREATE 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特性将记录更新操作之前的更新内容, 示例:

```SQL
CREATE OR REPLACE TRIGGER trg_after_update
AFTER DELETE ON employee
FOR EACH ROW
DECLARE
BEGIN
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触发器**

这种触发器能够在用户登录系统时执行,可以作为系统检测步骤,例如检查危险的授权,示例:

```SQL
CREATE OR REPLACE TRIGGER trg_logon
AFTER LOGON ON DATABASE
BEGIN
IF(has_role('SYSDBA')) THEN
RAISE_APPLICATION_ERROR(-20000,'拒绝SYSDBA授权');
END;
/

以上就是Oracle数据库中触发器的几种类型及其示例,触发器是一种非常有用的对象。它能够提高系统的处理性能,这需要用户在设计上考虑是否需要使用它实现某些应用效果。


数据运维技术 » Oracle数据库触发器类型详解(oracle触发器类型)