深入浅出Oracle触发器类型(oracle触发器类型)

Oracle触发器是Oracle数据库提供的一种非常实用的功能,它可以按照我们期望的方式自动执行一些修改和查询操作。Oracle触发器有很多种,它们可以在每种表操作(INSERT、UPDATE、DELETE、SELECT)发生时自动激活并执行相应的DML语句,从而更好的满足我们的需求。

Oracle触发器类型主要分为3类:Row-level触发器、Statement-level触发器和Database-level触发器。

1、Row-Level触发器:

Row-level触发器的动作是一行一行的处理,它们可以在INSERT、UPDATE和DELETE操作发生时自动激活并执行相应的语句或操作,比如增加一列,做一些复杂的更新操作等,下面是一个Row-level触发器的简单例子:

CREATE OR REPLACE TRIGGER trg_emp_modify

BEFORE INSERT OR UPDATE OR DELETE ON emp

REFERENCING OLD AS old NEW AS new

FOR EACH ROW

BEGIN

IF (INSERTING OR UPDATING) THEN

new.date_modified := sysdate;

ELSE

DELETE FROM audit_proj_log WHERE pk_value=old.PK;

END IF;

END;

/

2、Statement-Level触发器:

Statement-level触发器只在触发操作(INSERT、UPDATE、DELETE)发生时触发,但它们处理的是操作的总体,不是行级,例如:在DELETE时提示操作用户“是否确认删除”等,下面是一个Statement-level触发器的例子:

CREATE OR REPLACE TRIGGER trg_emp_delete

BEFORE DELETE ON emp

BEGIN

IF :old.empno 0 THEN

dbms_output.put_line(‘Are you sure you want to delete Emp ‘|| :old.empno ||’ ?’);

END IF;

END;

/

3、Database-Level触发器:

Database-level触发器只在特定数据库操作发生时才会触发,比如STARTUP、SHUTDOWN和ALTER用户等等,下面是一个Database-level触发器的例子:

CREATE OR REPLACE TRIGGER trg_sys_startup

AFTER STARTUP ON DATABASE

BEGIN

dbms_output.put_line(‘Performing System startup trigger’);

END;

/

以上就是Oracle触发器的3种类型介绍,Oracle触发器可以帮助我们自动执行一些修改和查询操作,使我们业务变得更加自动化,同时也增强了系统的稳定性和安全性,但要注意触发器的使用要合理,不然会给系统带来不必要的性能损失!


数据运维技术 » 深入浅出Oracle触发器类型(oracle触发器类型)