深入理解Oracle触发器的类型(oracle触发器类型)

Oracle触发器是在用户对表进行增删改操作时,通过指定的条件来自动完成一系列操作的程序。它主要用于进行复杂的数据库更新,可以在系统生成日志,调用存储过程等。Oracle触发器主要分为三种:行触发器,给定语句触发器和编译触发器,下面我们将具体来介绍。

行触发器由一组DML命令触发,当用户执行INSERT,UPDATE或DELETE操作时,即可引起触发器的触发。它是触发器的重要组成部分,其执行语句可以作用在这些行上。例如:

CREATE OR REPLACE TRIGGER tpl_adm_emp_trigger

AFTER DELETE ON emp

FOR EACH ROW

BEGIN

INSERT INTO emp_log (emp_id, operation)

VALUES (:OLD.emp_id, ‘DELETE’);

END;

/

上面的触发器创建在emp表上,并接收DELETE事件,当用户执行DELETE时,即可触发在表emp_log中插入删除记录。

给定语句触发器也叫DDL触发器,它由一个DML语句设置,并由DDL事件触发,比如CREATE,ALTER等。该语句在DDL操作完成时,即可被执行。例如:

CREATE OR REPLACE TRIGGER tpl_adm_table_trigger

BEFORE CREATE ON database_schema

BEGIN

INSERT INTO table_log (table_name, schema_name)

VALUES (:NEW.table_name, :NEW.schema_name);

END;

/

上面的触发器设置在数据库模式上,接收BEFORE CREATE事件,当用户在数据库模式下执行CREATE TABLE时,即可在表table_log中插入新建表的记录。

编译触发器由于可以执行任何类型的语句,所以它的应用范围非常广泛。例如:

create or REPLACE TRIGGER tpl_adm_update_trigger

before UPDATE OF commission

on emp

FOR EACH ROW

BEGIN

IF (:NEW.commission > :OLD.commission

AND :NEW.sal > :OLD.sal) THEN

DBMS_OUTPUT.PUT_LINE(‘The commission has increased by more than the salary!’);

END IF;

END;

/

上面的触发器设置在emp表上,当用户在此表上执行UPDATE时,当佣金大于原来的佣金,且薪水不低于原来的薪水,则将字符串“佣金比原来增加了!”输出到 DBMS_OUTPUT中。

因此,从上述三种Oracle触发器可以看出,它们都有各自的作用,用户可以根据自己的需要来选择使用。


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