Oracle触发器:分类与功能(oracle触发器类型)

Oracle触发器是数据库应用程序开发中一种常见的非常有用的技术。它使用一系列的事件来监控表或行的变化,可以用来实现安全环境中数据完整性,以及数据库自动维护和操作管理。

Oracle触发器归类有三类:行触发器、表触发器和级联触发器。

行触发器(row trigger)允许在每个SQL语句执行的表的每一行上触发一个动作。它是基于某个表上特定的行,当执行某个操作时,触发器会被执行,可以对相应的操作作出反应。下面是行触发器的实例示例:

“` sql

CREATE OR REPLACE TRIGGER tr_name

BEFORE insert or update of salary

ON employees

FOR EACH ROW

BEGIN

if :new.salary

:new.salary = 1000;

END IF;

END;


表触发器(table trigger)可以在表的任何 DDL 或 DML 操作上触发一个动作。这个触发器在每一次对数据库表进行操作时就会被触发,它可以对操作作反应。下面是表触发器的实例示例:

``` sql
CREATE OR REPLACE TRIGGER tr_name
BEFORE DELETE OR INSERT
ON departments
FOR EACH ROW
BEGIN
if INSERTING THEN
INSERT INTO departments_log
VALUES(user,sysdate,'INSERT');
ELSIF DELETING THEN
INSERT INTO departments_log
VALUES(user, sysdate,'DELETE');
END IF;
END;

级联触发器(cascade trigger)可以在表定义时,触发器可以被定义为“级联”,它将派生在主表上执行的DML操作反映给从表上。下面是级联触发器的实例示例:

“` sql

CREATE TABLE master_tbl

(

master_tbl_id NUMBER PRIMARY KEY,

Name varchar2(100)

);

CREATE TABLE detail_tbl

(

detail_tbl_id NUMBER PRIMARY KEY,

master_tbl_id NUMBER,

Name varchar2(100)

);

CREATE OR REPLACE TRIGGER tr_name

AFTER DELETE

ON master_tbl

FOR EACH ROW

BEGIN

DELETE FROM detail_tbl

WHERE master_tbl_id = :old.master_tbl_id;

END;


Oracle触发器的功能主要有:逻辑检查,支持规则;保护数据完整性,可以执行业务规则;维护历史性数据变化,可以把数据变更信息以安全的方式保存;实现级联DML,实现主从表的DML操作。

Oracle触发器可以在表或行操作发生变化时针对此变化进行相应的反应,很大程度上改善了Oracle数据库的安全性和灵活性。

数据运维技术 » Oracle触发器:分类与功能(oracle触发器类型)