掌握Oracle触发器的三种类型(oracle触发器类型)
Oracle触发器(Triggers)是一种事件发生机制,根据特定条件触发时可以执行一系列的功能。为了提升操作的可靠性和安全性,Oracle 引入了三种的触发器类型,即行触发器、表触发器、DDL触发器,它们分别适应不同的场景,这里我们详细介绍下。
一、行触发器(Row Trigger)是 Oracle 数据库中最常见的触发器类型,它会在 INSERT,DELETE,UPDATE 等对表进行修改(DML)时被触发。简单说明下它的实现机制, SELECT 操作不会触发它,而其他DML操作在执行时把受影响的每一行记录都作为触发器的新行。有两种行触发器,分别是:
BEFORE 触发器:它会在 DML 事件发生之前被触发。
AFTER 触发器:它会在 DML 事件发生之后被触发。
对行触发器的详细使用方法,可以参考下面这个例子:
CREATE OR REPLACE TRIGGER add_row_log
AFTER INSERT ON table_name
FOR EACH ROW
BEGIN
INSERT INTO table_name_log
VALUES (:NEW.column_name);
END;
其中add_row_log是一个行触发器,当执行 INSERT 操作时,针对新插入的每一行都会新增一条日志记录,从而达到追踪这些变更的目的。
二、表触发器(Table Trigger)也称作组触发器,它的触发条件是一次性的,不管表中有多少行发生变化,只会执行一次,这种触发器也不像行触发器那样汇集每一行的记录,而是针对一组行表中更新变化这个过程触发……
其语法实现如下:
CREATE OR REPLACE TRIGGER add_table_log
AFTER UPDATE OR DELETE ON table_name
BEGIN
INSERT INTO table_name_log(table_name, modified_date)
VALUES (:OLD.column_name,sysdate);
END;
比如上面的例子,它会在 UPDATE 和 DELETE 操作发生时被触发,会记录受影响的列名和当前的操作日期。
三、DDL触发器(DDL Trigger)它依赖系统DLL事件,比如 CREATE,ALTER,DROP,TRUNCATE等操作,这些操作可能会对系统产生重大影响,如果想对这些操作做一定的安全控制,就需要使用到它。它的实现可以使用下面的语法:
CREATE OR REPLACE TRIGGER log_changes
AFTER DDL ON database
BEGIN
INSERT INTO table_name_log
VALUES (‘somebody’,sysdate,ora_sysevent);
END;
以上就是Oracle触发器的三种类型介绍,理解好它们的用法,可以有效的提升系统的安全性,提高操作的便捷性。