深入理解Oracle数据库触发器类型(oracle触发器类型)

Oracle数据库触发器是一种特殊的PL/SQL代码,它可以在 Oracle 数据库中某些事件发生时自动触发和执行。触发器能捕捉用户在 Oracle 数据库的操作情况,检测到某一具体的动作发生后,自动执行一系列的语句,它既具备 Oracle 数据库及Sql语句的特点,也能实现面对对象的编程特性。

Oracle数据库有多种触发器类型,其中最常见的是表级触发器、行级触发器和单位触发器。

表级触发器,也称表触发器(Table Trigger),是一种最常用的触发器。它是在某一数据库表上以预先定义的动作来触发影响整个表的事件,也可以用来对对象型表进行编程。它的定义可以包括 Insert、Update、Delete 或是其他操作,运行时可以获取新插入/更新/删除的行。

下面是一个使用表级触发器的例子,这个例子实现了当发生I NSERT操作时,在 emp_change_log表中记录旧记录和新记录。

创建表:

CREATE TABLE emp (

empno number primary key,

empname varchar2(40)

);

CREATE TABLE emp_change_log (

old_record varchar2(2000),

new_record varchar2(2000)

);

创建表级触发器:

CREATE OR REPLACE TRIGGER tr_emp_table

AFTER INSERT ON emp FOR EACH ROW

DECLARE

old_record_str VARCHAR2(2000);

new_record_str VARCHAR2(2000);

BEGIN

SELECT OLD.empNO, OLD.EMPNAME INTO old_record_str FROM dual;

SELECT :NEW.EMPNO, :NEW.EMPNAME INTO new_record_str FROM dual;

INSERT INTO emp_change_log VALUES (old_record_str, new_record_str);

END;

行级触发器(Row Trigger ),它允许你在每一行上定义一个触发器,当一个某一行发生变化时,行级触发器将被触发。它可以立即响应变化,从而执行某些操作,比如记录一下变化后的数据,或者写入一个日志,也可以查看影响的行数,并决定是否提交记录。

下面的代码片段创建了一个表级触发器,当EMPNAME字段出现了更改时,将会触发该触发器:

CREATE OR REPLACE TRIGGER tr_emp_row

AFTER UPDATE OF EMPNAME ON emp FOR EACH ROW

DECLARE

BEGIN

INSERT INTO emp_change_log VALUES (:OLD.EMPID, :OLD.EMPNAME, :NEW.EMPID, :NEW.EMPNAME);

END;

单位触发器(Statement-Level Trigger),同表级触发器一样,也是根据用户操作定义的,但针对的是整个语句,而不是特定的行。它也是在特定的事件(插入、更新或删除)发生时,触发执行指定的处理动作。

例如,下面的代码片段中,我们创建了一个单位触发器,当有用户更改EMP表中EMPNAME字段时,就会将更改的记录记录在emp_change_log表中:

CREATE OR REPLACE TRIGGER tr_emp_statement

AFTER UPDATE OF EMPNAME ON emp

DECLARE

old_record_str VARCHAR2(5000);

new_record_str VARCHAR2(5000);

BEGIN

SELECT OLD.EMPID, OLD.EMPNAME INTO old_record_str FROM dual;

SELECT :NEW.EMPID, :NEW.EMPNAME INTO new_record_str FROM dual;

INSERT INTO emp_change_log VALUES (old_record_str, new_record_str);

END;

总而言之,Oracle数据库触发器是一种独特的PL/SQL代码,它可以根据用户定义的事件来触发和执行指定的动作,Oracle数据库有多种触发器类型,分别为表级触发器、行级触发器和单位触发器,它们都相对容易理解和使用。


数据运维技术 » 深入理解Oracle数据库触发器类型(oracle触发器类型)