探索Oracle触发器的多种类型(oracle触发器类型)

## 探索Oracle触发器的多种类型

在oracle数据库系统中,触发器是一种特殊的存储过程,它可以在特定事件发生时自动执行,而无需用户的干预。 Oracle实现了多种不同类型的触发器,其中最常用的5种类型包括:行触发器、表触发器、存储过程触发器、系统触发器和可管理触发器。

### 行触发器

行触发器主要用于监控数据库表中行更新操作的变化。 它可以触发在表行发生INSERT,UPDATE和DELETE操作时执行的特定任务。 下面是一个行触发器示例:

“`sql

CREATE OR REPLACE TRIGGER TR_EMP_UPDATE

–Trigger Definition

after UPDATE OF emp_id, emp_name ON emp_details

FOR EACH ROW

BEGIN

IF(:OLD.emp_id) (:NEW.EMP_ID)

THEN

INSERT into auditting_table

(audit_column1, audit_column2, etc)

VALUES(:OLD.EMP_ID, :OLD.EMP_NAME, etc);

END IF;

END;


行触发器会在表的每一个行发生 UPDATE 操作时自动触发,这将输入原始值和新值到自定义表中。

### 表触发器

表触发器可以定义在表上,可以触发在表中执行INSERT,UPDATE或DELETE操作时自动执行的特定操作。 下面是一个示例:

```sql
CREATE OR REPLACE TRIGGER TR_EMP_MGR
--Trigger Definition
after INSERT OR DELETE OR UPDATE ON emp_details
BEGIN
IF INSERTING THEN
INSERT into employee_mgr
(mgr_id, mgr_name, etc)
VALUES(:NEW.EMP_ID, :NEW.EMP_NAME, etc);
END IF;
END;

该触发器将在表中进行INSERT,DELETE或UPDATE操作时自动调用,并把结果插入到指定的另一个表中。

### 存储过程触发器

存储过程触发器提供了另一种类型的触发机制,用于调用特定的存储过程来处理操作。 例如,将一个chage_track表上的更改反应到另一个记录表中的更改记录:

“`sql

CREATE OR REPLACE TRIGGER TR_CT_UPDATE

–Trigger Definition

after INSERT OR UPDATE ON change_track

FOR EACH ROW

BEGIN

change_log sp_changes(:NEW.ct_id, :NEW.ct_action);

END;


该触发器将在change_track表中进行INSERT和UPDATE操作时自动调用存储过程sp_changes。

### 系统触发器

系统触发器是一种特殊的触发器,它可以在数据库重新启动或定期时自动启动特定的任务。 以下是一个示例:

```sql
CREATE OR REPLACE TRIGGER DB_STARTUP_TIMER
AFTER STARTUP ON database
BEGIN
EXECUTE procedure start_database;
END;

这将在每次服务器重新启动时自动调用start_database存储过程。

### 可管理触发器

可管理触发器是Oracle 11g中引入的新特性,用于管理触发器的语法和行为,它将可以自动执行一系列步骤,如:

“`sql

CREATE OR REPLACE TRIGGER TR_MANAGE_TIMER

MANAGED BEFORE INSERT OR UPDATE OR DELETE ON emp_table

BEGIN

IF INSERTING THEN

EXECUTE procedure sp_before_insert;

ELSIF UPDATING THEN

EXECUTE procedure sp_before_update;

ELSIF DELETING THEN

EXECUTE procedure sp_before_delete;

END IF;

END;


可管理触发器将在表的每一个行发生对应操作(INSERT,UPDATE,DELETE)时自动调用对应的存储过程。

以上便是oracle数据库中最常用的5种触发器类型,用不同的触发器可以达到不同的数据库管理目的。 正确选择和使用触发器可以极大地提高数据库的效率和性能。

数据运维技术 » 探索Oracle触发器的多种类型(oracle触发器类型)