Oracle触发器提供了在开发数据库应用程序时关联多个表,以便保证操作一致性规则的有力手段。它们是在某些特定的数据库操作发生时自动调用的stored procedure,可以帮助用户确保它们操作中数据库中数据有效性、完整性和安全性。
Oracle支持不同种类的触发器:
● 某个表(或视图)被更新时所触发的触发器,例如INSERT、UPDATE、IFnd DELETE. 称为行触发器(Row Trigger)。
● 某个表(或视图)的结构被修改时所触发的触发器,例如ALTER、 DROP或TRUNCATE. 称为DDL触发器(DDL Trigger)。
● 登录用户信息发生变化的时候所触发的触发器,例如登陆、踢出、修改密码等。称为登录时触发器(LOGON Trigger)。
行触发器常用于向某些表插入一条新记录或更新某些记录时,自动修改另一个表中的相关记录值。例如,我们可能需要在根据用户的操作更新一张用户信息表的记录时,同时自动更新一张记录某种相关信息的日志表:
例如:
create or replace trigger T1
on users
for update
as
begin
insert into users_log
select users.*, sysdate
from users
where users.user_id = :new.user_id;
end;
/
DDL触发器对数据库中表、视图、序列和用户当前操作等元数据的变化都有响应,可以用于审计和约束某些特定形式的数据定义语言(DDL)操作。例如,可以在更改表定义时自动将这些更改复制到另一张表中:
例如:
create or replace trigger TR_ALTER_TABLE
after alter on database
begin
insert into audittable
select ‘表结构改变’ as operation_type,
user,
:new.object_type,
:new.object_name,
:new.ddl_text,
sysdate
from dual;
end;
/
最后,登录触发器会在用户登录和登出时被调用,用于做更加精准的审计。例如,可以跟踪用户的登录信息,并将其记录在指定的日志表里:
例如:
create or replace trigger TR_LOGON
AFTER LOGON ON DATABASE
begin
insert into logon_log
select sys_context(‘USERENV’,’HOST’) as host,
sys_context(‘USERENV’,’SESSIONID’) as session_id,
sys_context(‘USERENV’,’CURRENT_SCHEMA’) as current_schema,
sysdate as logon_time
from dual;
end;
/
总之,Oracle支持多种类型的触发器,可以在满足用户复杂场景下完成数据库应用程序安全、可靠和有效性的要求,为开发者们带来更多的功能强大的工具,帮助他们构建卓越的数据库应用程序。