深入理解Oracle触发器类型(oracle触发器类型)
Oracle触发器是数据库中一种用于自动发出在特定条件下执行的语句或程序的对象。Oracle触发器可以在用户变更的任何表或任何视图的表中发出,执行任何行为从简单的增加和减少统计计数器值到发出提醒通知。
Oracle触发器可以按类型分为三种:行级触发器、表级触发器和登录触发器。下面将详细介绍每种ORACLE触发器的类型:
(1)行级触发器:行触发器是一种特别的触发器,通常用于自动更新或删除表的记录,例如在更改表中的数据后自动记录日期和时间。行触发器具有下列特征:它可以按照一个或多个特定的列的值激发;可以绑定到表的任何缓冲操作,如INSERT、UPDATE或DELETE;还可以在触发期间更新或查询其他表。
下面是行级触发器的示例:
CREATE OR REPLACE TRIGGER重新接收数据
AFTER INSERT ON Table1
FOR EACH ROW
BEGIN
UPDATE Table2
SET abc=:new.abc;
END;
(2)表级触发器:表级触发器在整个表的操作中被激发,执行的SQL操作对表的所有行都有效。这类触发器通常用于维护表的其他记录,例如更新一个统计字段或记录表的更改。表触发器具有下列特征:可以响应INSERT、UPDATE或DELETE操作中任何组合;可以处理多行更改;它不能访问触发操作的影响行,只能引用新插入行。
下面是表级触发器的示例:
CREATE OR REPLACE TRIGGER count_rows
AFTER INSERT OR UPDATE OR DELETE ON Table1
BEGIN
UPDATE Table2
SET count=count+1;
END;
(3)登录触发器:登录触发器仅在数据库会话中只被激发一次,或者在每次会话的启动或结束时激发。这类触发器通常用于在每个会话时执行可以改变数据库所给定的任务,例如初始化会话的变量或工作区。
下面是登录触发器的示例:
CREATE OR REPLACE TRIGGER login_trigger
BEFORE LOGON ON Database
BEGIN
declare
v_dbuser varchar2(30);
BEGIN
select user into v_dbuser from dba_users
where user = sys_context(‘USERENV’,’SESSION_USER’);
END;
END;