深入浅出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触发器可以帮助我们自动执行一些修改和查询操作,使我们业务变得更加自动化,同时也增强了系统的稳定性和安全性,但要注意触发器的使用要合理,不然会给系统带来不必要的性能损失!