深入了解Oracle触发器: 四种类型概述(oracle触发器类型)

Oracle触发器(trigger)是用来执行某些特定的任务的一种数据库对象,它能够在预先定义的事件触发时执行一组上面定义的SQL语句,被触发时可执行SQL语句。在Oracle数据库中,我们可以为某个表创建不同类型的触发器。Oracle为我们提供了四种触发器类型:BEFORE/AFTER触发器,INSERT触发器,UPDATE触发器和DELETE触发器,它们都有自己的特性和用途,下面就来简单的了解一下每种类型的触发器。

BEFORE/AFTER触发器:

BEFORE/AFTER触发器是两种最常见的触发器类型,它们的区别在于AFTER触发器必须允许定义在表上的表达式,而BEFORE触发器只允许定义在新行上的表达式。在BEFORE触发器上,还可以根据需要定义新行或更新行,以便在表动作完成之前进行强制操作。

例如:CREATE OR REPLACE TRIGGER TEST_TRIG BEFORE INSERT ON testtab FOR EACH ROW

BEGIN

INSERT INTO logtable VALUES (:OLD.id, :NEW.name);

END;

INSERT触发器:

INSERT触发器对应INSERT DML操作,INSERT触发器会在一个新行被插入到数据表中前触发。INSERT触发器中的触发表达式指定在定义的特定字段或多个字段同时被插入或更新时将被触发。

例如:CREATE OR REPLACE TRIGGER test_trig

AFTER INSERT ON testtab

FOR EACH ROW

BEGIN

INSERT INTO logtable VALUES (:NEW.id, :NEW.name);

END;

UPDATE触发器:

UPDATE触发器对应UPDATE DML操作,UPDATE触发器会在一个行被更新前触发,它包含了已更新前和更新后的值,UPDATE触发器可以用一个表达式来把它们分割开。

例如:CREATE OR REPLACE

TRIGGER test_trig BEFORE UPDATE OF id, name ON testtab

FOR EACH ROW

BEGIN

INSERT INTO logtable VALUES (:OLD.id, :NEW.name);

END;

DELETE触发器:

DELETE触发器对应DELETE DML操作,DELETE触发器会在一个行被删除前触发,在DELETE触发器中可以访问被删除行的列的值。

例如:CREATE OR REPLACE

TRIGGER test_trig BEFORE DELETE ON testtab

FOR EACH ROW

BEGIN

INSERT INTO logtable VALUES (:OLD.id, :OLD.name);

END;

以上就是关于Oracle触发器各种类型的简要说明,上面的示例代码只是简单的用例,你可以按照你的需求写出更复杂的触发器,以满足业务需求。


数据运维技术 » 深入了解Oracle触发器: 四种类型概述(oracle触发器类型)