玩转 Oracle:牢记触发器类型(oracle触发器类型)

Oracle数据库是使用各种功能最广泛的行业领先数据库及应用开发平台,用户可以使用Oracle里提供的各种复杂的功能。其中之一便是触发器(Triggers),它主要用于增强性能,减少人为错误,实现数据完整性,维护安全性和“限制”,维护关系的完整性,实现“私有”性质的约束。

Oracle触发器分为 一次触发器(Instead-Of Triggers)和综合触发器(Compound Triggers)。一次触发器是一种应用于视图或不支持DML操作的表或视图时,可以针对DML操作应用的触发器。下面是一个使用一次触发器的示例:

— First create a sample table

CREATE TABLE test_table (

id INTEGER,

value1 INTEGER,

value2 INTEGER

);

— Then create a view on it

CREATE VIEW v_test_table AS

SELECT * FROM test_table;

— Create an Instead-Of trigger for the view

CREATE VIEW v_test_table_update_instead as

INSTEAD OF

UPDATE ON v_test_table

FOR EACH ROW

BEGIN

UPDATE test_table SET

value1 = :NEW.value1,

value2 = :NEW.value2

WHERE

id = :NEW.id;

END;

综合触发器是最常用的Oracle触发器类型,它在一个操作过程中,用多种能力处理多种不同的操作,因此能够增强性能。下面是一个使用综合触发器的示例:

— First create a sample table

CREATE TABLE test_table (

id INTEGER,

value1 INTEGER,

value2 INTEGER

);

— Create a compound trigger

CREATE OR REPLACE TRIGGER tr_test_table

FOR INSERT OR UPDATE OR DELETE ON TEST_TABLE

COMPOUND TRIGGER

— Log information about any changes

BEFORE EACH ROW IS

BEGIN

INSERT INTO audit_log VALUES(‘ACTION: ‘ || :new.status || ‘, Item: ‘ || :new.id);

END BEFORE EACH ROW;

— After all changes, update some other tables

AFTER STATEMENT IS

BEGIN

UPDATE some_other_table

SET status = ‘UPDATED’

WHERE some_column = ‘VALUE’;

END AFTER STATEMENT;

END TR_test_table;

在使用Oracle触发器时,应牢记了解和区分触发器类型,按照不同的需求使用不同的触发器类型。一次触发器(Instead-of Triggers)可以用来处理视图或不支持DML操作的表和视图;综合触发器(Compound Triggers)可以用来在一个操作过程中,处理多种操作的需求。这样可以提升Oracle的性能,缩短处理的时间,使用户使用体验得到更佳的提升。


数据运维技术 » 玩转 Oracle:牢记触发器类型(oracle触发器类型)