玩转 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的性能,缩短处理的时间,使用户使用体验得到更佳的提升。