探索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操作时自动执行的特定操作。 下面是一个示例:
```sqlCREATE OR REPLACE TRIGGER TR_EMP_MGR
--Trigger Definitionafter 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。
### 系统触发器
系统触发器是一种特殊的触发器,它可以在数据库重新启动或定期时自动启动特定的任务。 以下是一个示例:
```sqlCREATE OR REPLACE TRIGGER DB_STARTUP_TIMER
AFTER STARTUP ON databaseBEGIN
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种触发器类型,用不同的触发器可以达到不同的数据库管理目的。 正确选择和使用触发器可以极大地提高数据库的效率和性能。