掌握Oracle触发器的类型及其应用(oracle触发器类型)

Oracle触发器是概念中定义可以应用到表,视图和数据库事件上的一种特殊 Oracle 对象,它会在某种时候或指定的操作执行之前或之后(甚至可以同时执行)调用,以在特定事件发生时执行一些预定义的 SQl 或 PL/SQL 语句。 Oracle 触发器主要有四种类型:表级触发器,行级触发器,数据库触发器和系统事件触发器,它们的应用场景及四种类型的区别如下:

1.表级触发器:它是最常用的触发器类型,它可以响应表中某些操作(比如:INSERT,UPDATE 或 DELETE),并在执行此操作之前或之后(取决于你在 CREATE TRIGGER 语句中指定的触发时间)执行指定的代码,它的应用场景主要是对表中的数据进行自动跟踪。

例如:

–创建一个表级 INSTEAD OF INSERT 触发器,在插入一条新记录之前检查姓名是否符合字符串规则

CREATE OR REPLACE TRIGGER name_check_trigger

INSTEAD OF INSERT ON student

FOR EACH ROW

DECLARE

— 是否符合字符串规则

l_name_ok BOOLEAN;

BEGIN

— 检查 name 是否符合字符串规则

l_name_ok := checkName(:NEW.name);

— 如果字符串符合规则,插入学生记录

IF l_name_ok THEN

INSERT INTO student VALUES (:NEW.name);

END IF;

END;

2.行级触发器:它是第三种触发器类型,它可以响应到特定行或表上的某种操作,更具体的说,它可以响应到表的某一行(如在更新删除或插入时),它的应用场景主要是用来根据某条具体的记录来改变表里其他行的值。

例如:

— 创建表级 AFTER UPDATE 触发器,如果插入一条新记录后,该记录的分数更新为高于 90 分,那么该学生班级就会改变

CREATE OR REPLACE TRIGGER high_score_class_update

AFTER UPDATE ON student

FOR EACH ROW

BEGIN

— 如果新分数大于 90

IF :NEW.score > 90 THEN

— 更改学生班级

UPDATE student SET class = ‘高分班’ WHERE id = :NEW.id;

END IF;

END;

3.数据库触发器:它是指针对数据库操作或连接的触发器,可以在任何用户以任何方式连接到数据库时,可以被触发,它的应用场景主要是维护、跟踪和安全控制数据库。

例如:

— 为系统触发器创建一个 AFTER LOGON 触发器,如果有新用户登录,那么就会向用户发送欢迎消息

CREATE OR REPLACE TRIGGER welcome_user

AFTER LOGON ON DATABASE

BEGIN

DBMS_OUTPUT.PUT_LINE(‘欢迎用户!您登录的数据库是:’|| USER);

END;

4.系统事件触发器:它是指可以响应在数据库服务器端的某些系统事件的触发器,它的应用场景主要是在数据库服务器端发生了某些指定的系统事件时触发相应的操作。

例如:

— 创建一个系统事件触发器,如果该数据库进程处于空闲状态超过一小时,就会发送一条消息到管理员

CREATE OR REPLACE TRIGGER send_message_to_admin

AFTER idle_time_limit_reached ON DATABASE

BEGIN

— 单位:秒

DBMS_ALERT.SIGNAL(‘空闲时间超时!’, 60*60);

END;

通过以上四种Oracle触发器的特点及应用场景,可以


数据运维技术 » 掌握Oracle触发器的类型及其应用(oracle触发器类型)