深入浅出Oracle触发器类型介绍(oracle触发器类型)
Oracle触发器是数据库用户可以使用的一种强大功能,通过它可以实现对数据库中数据和对象的自动追踪,从而维护数据库的完整性。Oracle触发器主要有四种类型,分别是行触发器、表触发器、登录触发器和DML触发器。
行触发器用于监视DML语句(即数据更新、插入、删除语句),可以对每一行数据的更新操作进行自动监测,允许更全面的记录数据更改的细节。一般情况下,行触发器在我们遇到一些针对特定数据进行操作的情况下会得到比较好的应用,比如为每次更新的行添加创建日期,以及复制一些数据信息到另外一张表中等,如下:
CREATE TRIGGER t_m
BEFORE UPDATE ON t_m
FOR EACH ROW
BEGIN
UPDATE t_m set create_date=sysdate where rowid=:new.rowid;
INSERT into t_m_his select * from t_m;
END;
/
表触发器是在数据库表上触发触发器动作的一种表触发器,它可以在真正操作数据时增强完整性约束以及实现完整性审计等功能。只要操作表中的任意数据,这类触发器就会执行,所以表触发器对更新语句的执行效率也较之行级触发器有所降低。典型的如下:
CREATE OR REPLACE Trigger t_b
Before Update ON t_b
FOR EACH ROW
BEGIN
insert into t_b_his select * from t_b;
END;
/
登录触发器是在用户登录数据库时执行的,当用户未登录成功之前,触发器便可以捕捉到用户的连接信息并通过数据库来对用户或者联机行为进行登录时数据审核,从而实现安全性的管理。一般登录触发器的代码如下:
CREATE OR REPLACE Trigger t_l
On Logon Database
BEGIN
if(user!=’sysdba’and user!=’system’) then
rollback;
raise_application_error(-20000, ‘用户’||user||’登录失败!’);
END if;
END;
/
DML触发器用于监测由用户提交过来的对表更新操作,具有性能较完整性约束或完整性审计等传统触发器所不具备的强大灵活性,因为它在执行前或执行后还能够检测其中的一些逻辑。比如当一条delete操作涉及多行数据时,可以通过检测与前后比较来确定是否可以进行操作。典型的如下:
CREATE OR REPLACE Trigger t_d
Before delete on t_d
for each row
declare
cnt number;
begin
select count(*) into cnt from t_d where id=:old.id;
if cnt >= 5 then
rollback;
raise_application_error(-20000, ‘删除了超过五行的数据,数据已回滚!’);
END if;
END;
/
总结:Oracle触发器是一种强大的功能,其类型主要有行触发器、表触发器、登录触发器和DML触发器4种,他们都具有各自的强大功能,得到广泛应用。