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

Oracle 触发器是数据库的表对象,在对应的表上执行的数据库操作被触发,当满足某种条件时,则触发器将执行特定的动作。主要有三种类型的Oracle触发器:DML TYPE,DDL TYPE, DATABASE EVENT TRIGGER。

DML TYPE触发器。此类触发器被设置在表上并监听表上的增、删、改操作,它反映出表中数据发生变化时发布动作,以便更新与此表对应的其它相关数据,它经常与存储过程结合使用,一般通过调用存储过程来实现数据的更新、删除、操作。DML TYPE触发器有AFTER,BEFORE,INSTEAD OF,FOR EACH ROW 四种类型,可以根据不同的应用条件使用不同的触发器。例如:

CREATE OR REPLACE TRIGGER tri_Updatesalary

BEFORE DELETE OR UPDATE ON employee

FOR EACH ROW

BEGIN

UPDATE salgrade SET highsal = :NEW.salary WHERE grade=:OLD.grade;

END;

/

DDL TYPE触发器。此类触发器可以查看数据库、检查元数据和对象的变化,如DDL STATEMENT,PERMISSION CHANGES等。它主要是监视位于数据库或数据库对象上的事件,可以捕捉到数据模式的变化情况,可以使用事件程序处理发生在数据库上的事务,这是最常用的一种类型。DDL TYPE触发器可以在使用CREATE, ALTER, or DROP对象的时候运行,也可以在grant和revoke授权的时候运行。它还可以用来完成自动化记录DDL操作的客观,以及实现一些后台活动。例如:

CREATE OR REPLACE TRIGGER tri_Object

AFTER DROP ON SCHEMA

BEGIN

sys.dbms_scheduler.run_job(‘table_backup’);

END;

/

DATABASE EVENT TRIGGER。此类触发器和DDL TYPE触发器有着相似的功能,它可以在数据库启动、停止,用户或会话连接和退出等数据库事件时发出触发信号,可以用来自动发布HDD空间状态报表,转储当前数据库状态等的功能。它的主要功能是监视位于数据库级别的事件,它可以捕捉反映状态变化的事件。例如:

CREATE OR REPLACE TRIGGER tri_Session

ON DATABASE

AFTER LOGOFF

DECLARE

BEGIN

— This trigger will write to a log table

INSERT INTO logtable values (user, ‘logoff’, sysdate);

END;

/

Oracle触发器可以根据具体的应用需求改变不同的类型,满足各类不同的操作,其应用非常广泛,几乎可以满足任何类型的应用场景,是DBA必不可少的工具。


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