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

Oracle数据库存储在磁盘上,在处理数据时存在性能瓶颈,有时候必须允许数据库执行的高效的操作和维护。为了管理数据库服务器的复杂性,Oracle提供了一些特殊的结构,如触发器,存储历史数据。

触发器是一种特殊的程序,在某些特定条件发生时立即处理,可以在表,视图或数据库层面上触发,主要用于在数据库操作期间实施一些约束规则或触发特定动作。Oracle 触发器可分为3种类型,分别是行触发器,表触发器和数据库触发器。详细介绍如下:

1、行触发器是一种定义的代码片段,它会在每次修改数据库中某一行数据时执行,它有两种形式,一种在满足一定条件之前激发,叫做BEFORE触发器,另一种在满足一定条件之后激发,叫做AFTER触发器。

例如,使用行触发器可以实现:每次向表中新增一条记录时,自动更新时间戳值或者以程序方式更新表中下一行的值,以及在新增记录前校验记录是否合法等。

下面是一个在每一行插入一条记录时,触发器自动更新字段值的示例:

“`sql

CREATE OR REPLACE TRIGGER TR_T1_IN

AFTER INSERT ON T1

FOR EACH ROW

BEGIN

UPDATE T1 SET SEQ=SEQ +1 where name=: NEW.NAME;

END;

/

“`

2、表触发器也称为列表触发器,属于定义在表上的触发器,用于响应该表中全部记录的操作,此时触发器会在处理行触发器之后触发,主要用于检查函数或插入非关系格式的表,也可以用来对导入导出操作进行调整,做一些特定的操作,比如删除表的索引等。

例如,使用表触发器可以实现:每次删除表中全部记录时,该表中的列值也会被自动清空,同时,会在删除的数据上记录一条跟踪日志信息。

下面是一个在删除表中所有记录时,触发器自动更新字段值的示例:

“`sql

CREATE OR REPLACE TRIGGER TR_T2_DEL

AFTER DELETE ON T2

FOR EACH ROW

BEGIN

DELETE FROM JOURNAL WHERE TABLE_NAME=’T2′;

END;

/

“`

3、数据库触发器是最高级别的触发器,可以响应系统级事件,它可以响应用户登陆,启动或终止数据库备份,系统参数发生变化以及其他一系列数据库操作时触发,通常用于创建和维护日志,检测异常或者捕获事件记录。

例如,使用数据库触发器可以实现:每次启动服务器,数据库启动日志会自动创建,每次用户登录时,登录日志也会自动被记录,以及检测是否有未登出的用户异常。

下面是一个在数据库启动时,触发器自动创建日志的示例:

“`sql

CREATE OR REPLACE TRIGGER TR_DB_START

AFTER STARTUP ON DATABASE

BEGIN

INSERT INTO LOG (TIME, MESSAGE) VALUES (SYSDATE,’THE DATABASE START’);

END;

/

“`

总而言之,Oracle触发器类型提供了精确控制数据库操


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