Oracle数据库触发器类型深度剖析(oracle触发器类型)

### Oracle数据库触发器类型深度剖析

Oracle数据库触发器(trigger)有多种类型,为了更好的实现不同的数据库操作,本文将主要介绍触发器的类型及其相关实例。

Oracle数据库触发器可分为四种类型:Row trigger,Statement trigger,INSTEAD OF trigger和Compound trigger。

1. Row trigger(行触发器):最常见的触发器类型,它使用句柄与表的数据行产生一种相互关系,当对数据行进行更新、删除或插入时,便会始行触发器体中的内容。

例如,我们创建一个触发器,用来监控表中更新操作,添加一条记录,记录操作者和更新时间:

“`sql

CREATE OR REPLACE TRIGGER update_log

BEFORE UPDATE ON table_name

FOR EACH ROW

BEGIN

INSERT INTO table_log (operator, action_time)

VALUES (user, sysdate);

END;


2. Statement trigger(语句触发器):针对Statement语句,表名与句柄中的数据记录无关。Statement Trigger一般只对DML(Data Manupulation Language)有效,触发器只要简单记录操作者和操作事件即可,不像Row Trigger需要插入、更新和删除操作才能触发,例如:

```sql
CREATE OR REPLACE TRIGGER update_log
AFTER INSERT OR UPDATE OR DELETE ON table_name
BEGIN
INSERT INTO table_log (operator, action_time)
VALUES (user, sysdate);
END;

3. INSTEAD OF trigger(代替触发器):当操作VIEW(视图)时,此类触发器会介入,可以直接作用于表。它可用于取代原有语句,而不是添加其它额外操作,例如:

“`sql

CREATE OR REPLACE TRIGGER update_view

INSTEAD OF UPDATE ON view_name

BEGIN

UPDATE table_name

SET age =: new.age

WHERE id =: new.id;

END;


4. Compound trigger(复合触发器):可以在触发器主体后拓展多条段落,这是Oracle提供的最新触发器类型。当然,可以也可以复合多个Row、Statement或INSTEAD OF trigger。

```sql
CREATE OR REPLACE TRIGGER update_log
FOR EACH ROW
BEFORE INSERT OR UPDATE
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO table_log (operator, action_time)
VALUES (user, sysdate);
END;
END;

以上就是关于Oracle数据库触发器类型深度剖析。通过上述介绍,读者应该能够从中取得一定的帮助,帮助实现不同的数据库操作。


数据运维技术 » Oracle数据库触发器类型深度剖析(oracle触发器类型)