Oracle数据库中触发器类型简介(oracle触发器类型)
Oracle数据库是大型企业日常工作中应用最为广泛的数据库,它拥有完善的数据库对象系统,其中触发器类型就是其中常用的数据库对象。触发器是指当满足特定的条件时,由数据库系统在系统层次上进行自动操作的一类程序。
Oracle数据库中触发器以其耐用且功能强大的特点,被广泛应用于企业系统中,其中它可以分为三种主要类型:
一、Row Level Triggers:
当数据库表中有行数据发生变化时(添加,更新或者删除),会触发该类型触发器。它也可以将变化后的数据,作为参数传递给触发器程序进行操作,例如:
CREATE OR REPLACE TRIGGER test_trigger
BEFORE UPDATE ON test_table FOR EACH ROW
DECLARE
temp_col1 VARCHAR2(50);
BEGIN
SELECT col1 INTO temp_col1 FROM test_table WHERE rowid = :new.rowid;
IF temp_col1 != :new.col1 THEN
— do something here
END IF;
END;
二、Statement Level Triggers:
当对数据库表进行添加,更新或删除操作时,会触发该类型触发器,主要特点是,可以将变化后的所有行数据作为一个集合传递给触发器。例如:
CREATE OR REPLACE TRIGGER test_trigger
BEFORE UPDATE OR DELETE ON test_table
BEGIN
FOR temp_record IN (SELECT * FROM test_table WHERE col1=:old.col1)
LOOP
— do something here
END LOOP;
END;
三、Compound Triggers:
这类触发器由三部分组成,包括Before Statement部分、Before Each Row部分和After Statement部分。前两部分行为相同,只是参数传递模式不同,都可以将变化后的数据作为参数传递,而After Statement部分针对更新或删除操作,可以将变化前后的所有行数据作为一个集合传递。例如:
CREATE OR REPLACE TRIGGER test_trigger
FOR UPDATE OR DELETE ON test_table
COMPOUND TRIGGER
BEFORE STATEMENT IS
temp_col1 VARCHAR2(50);
BEGIN
SELECT col1 INTO temp_col1 FROM test_table WHERE rowid = :old.rowid;
END BEFORE STATEMENT;
BEFORE EACH ROW IS
BEGIN
IF temp_col1 != :new.col1 THEN
— do something here
END IF;
END BEFORE EACH ROW;
AFTER STATEMENT IS
BEGIN
FOR temp_record IN (SELECT * FROM test_table WHERE col1=:old.col1)
LOOP
— do something here
END LOOP;
END AFTER STATEMENT;
END test_trigger;
触发器有三种类型,Row Level Triggers、Statement Level Triggers、Compound Triggers,它们都可以进行自动操作以及传递变化后的数据,是企业工作实施时不可缺少的重要用途。