深入浅出:Oracle 触发器类型(oracle触发器类型)
Oracle 数据库中有三类触发器,分别是表触发器、行触发器和级联触发器。本文将对各种触发器的基本用法和实现方式进行详细介绍。
表触发器指的是应用于表上的触发器,即当基表上DML语句被执行时,这类触发器会触发一段处理代码而不论基表的行是否被操作,表触发器可以为INSERT、UPDATE、DELETE语句设定,当基表上任何一条语句被执行时触发器就会被触发,表触发器一般仅能包含DDL元素如SELECT或INSERT,下列代码使用BEFORE关键字实现表触发器:
CREATE OR REPLACE TRIGGER t_bi_user
BEFORE INSERT ON users
FOR EACH ROW
BEGIN
INSERT INTO userlogs(user_name) VALUES (:NEW.username);
END;
当表users上的每行被插入时,t_bi_user触发器就被触发,并在userlogs表(日志表)中插入一行有关记录。
行触发器指的是应用于表行上的触发器,即当基表上DML语句被执行时,这类触发器会触发一段处理代码而仅限该次操作被操作的行,就类似我们可以在表中每行记录上附加新行行,行触发器也可以为INSERT、UPDATE、DELETE语句设定,下列代码使用AFTER关键字实现行触发器:
CREATE OR REPLACE trigger t_ai_user
AFTER INSERT ON users
FOR EACH ROW
BEGIN
INSERT INTO userlogs(user_name, modify_time) VALUES (:NEW.username, sysdate);
END;
当表users上的每行被插入时,t_ai_user触发器就被触发,并在userlogs表(日志表)中插入一行有关记录,其中还含有当前时刻的系统时间。
最后,是级联触发器,它表示当多个表上有一系列DML语句被执行时,一段处理代码会随之被执行,例如DELETE操作触发器,在DELETE子句之前先执行触发器,以保证数据的完整性:
CREATE OR REPLACE trigger t_uc_user
BEFORE DELETE ON users
FOR EACH ROW
BEGIN
DELETE FROM userlogs WHERE user_name = :OLD.username;
END;
当用户从表中删除前,t_uc_user触发器就会先被触发,将需要被删除的用户的相关日志数据先从userlogs表(日志表)中删除,以保证删除时不再继续插入该用户的日志记录。
综上所述,Oracle数据库中共有三类触发器:表触发器、行触发器和级联触发器,它们可以在DML语句被执行时实现各种相关数据记录和数据处理,运用合理可以节省开发人员的时间,提高开发效率。