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,它们都可以进行自动操作以及传递变化后的数据,是企业工作实施时不可缺少的重要用途。


数据运维技术 » Oracle数据库中触发器类型简介(oracle触发器类型)