深入理解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数据库有多种触发器类型,分别为表级触发器、行级触发器和单位触发器,它们都相对容易理解和使用。