Oracle数据库中触发器的类型研究(oracle触发器类型)

Oracle数据库的触发器通常被认为是一种正常的数据库对象,其主要作用是检测特定类型的数据库操作,以执行必要的特定行为。在Oracle数据库中,触发器可以用于实现复杂的业务规则,避免程序代码重复编写或修改。因此,触发器是一种常见而又重要的数据库对象,其类型研究是必要的。

Oracle数据库中有四种主要类型的触发器:DDL触发器(Data Definition Language),DML触发器(Data Manipulation Language),Row-Level触发器和Statement-Level触发器。

DDL触发器是用于检测对结构定义语言(DDL)的操作,也称为定义触发器。它能够捕获用户对数据库对象(如表,索引等)的创建,更改,删除等操作的行为,并做出必要的应答操作。例如:当用户对表做出更改,然后定义一个DDL触发器就可以根据相应的触发器指令做出反应:

CREATE OR REPLACE TRIGGER B4_DDL_TRIG

AFTER DDL ON DATABASE

BEGIN

INSERT INTO log_table VALUES(ORA_SYSEVENT,ORA_DICT_OBJ_OWNER,ORA_DICT_OBJ_NAME);

END;

DML触发器用于响应对DML语句(数据操纵语言)的操作,也被称为操作触发器,其可以捕获INSERT,UPDATE,DELETE等数据库操作,以执行必要的处理:

CREATE OR REPLACE TRIGGER B4_DML_TRIG

AFTER INSERT ON USER.table_name

BEGIN

INSERT INTO log_table VALUES(ORA_SYSEVENT ,ORA_LOGON_USER,ORA_NEW_VALUES);

END;

Row -Level触发器用于响应每一行数据受到DML操作时的行为,而单记录触发器可以监控数据表中某一行数据受到更新,删除,插入操作时以及执行任意动作:

CREATE OR REPLACE TRIGGER AUDIT_TRIG

AFTER INSERT OR UPDATE OR DELETE

ON USER.table_name FOR EACH ROW

BEGIN

INSERT INTO log_table VALUES(ORA_SYSEVENT ,ORA_LOGON_USER,ORA_OLD_VALUES,ORA_NEW_VALUES);

END;

Statement -Level触发器只能在整条DML语句执行完毕后才能检测,而无法检测每一行数据是如何受到DML操作的,它能够让触发器知道是时候对DML语句的操作:

CREATE OR REPLACE TRIGGER edit_trigger

AFTER INSERT OR UPDATE OR DELETE

ON user.table_name

DECLARE

Action VarChar(20);

BEGIN

IF UPDATING THEN

Action := ‘UPDATED’;

ELSEIF DELETING THEN

Action := ‘DELETED’;

ELSE

Action := ‘INSERTED’;

END IF;

INSERT INTO log_table VALUES(ORA_SYSEVENT ,ORA_LOGON_USER,Action);

END;

因此,从上述内容可以看出,Oracle数据库中有四种类型的触发器,分别是DDL触发器、DML触发器、Row-Level触发器和Statement-Level触发器。他们可以实现数据库特定任务执行以及定义某种业务逻辑,为数据库开发工作提供便利。


数据运维技术 » Oracle数据库中触发器的类型研究(oracle触发器类型)