深入认识Oracle触发器的分类类型(oracle触发器类型)

Oracle 触发器 (trigger)是数据库中强大的一种程序控制机 制,通过它可以自动执行一些操作, 平时比较常见的就是实现自动检查数据备 份、删除日志文件和创建单据号码等相 关操作。 另外,Oracle触发器也可以在某一特定的 时间或者特定的事件发生时,做出对对 应的动作。不仅如此,通过触发器,还可 以改变表中数据的一些规则,从而达到实 现数据完整性和约束性的目的。

Oracle触发器可以分为4类,它们是行触 发器、表触发器、DML触发器和系统触发 器。

行触发器是比较常用的一种类型,当某一 行被插入或者更新时,它就会被触发。此外 也可以根据设定的选项,在某一行被删除 时执行操作。一般来说,它应该分为三类: 插入时触发器、替换时触发器和删除时触 发器,具体示例如下:

–增加插入时触发器

CREATE OR REPLACE TRIGGER “SCHEMA”.”INSERT_TRIGGER”

AFTER INSERT ON TABLE_NAME

FOR EACH ROW

BEGIN

DBMS_OUTPUT.PUT_LINE(‘A row is inserted.’);

END;

–增加替换触发器

CREATE OR REPLACE TRIGGER “SCHEMA”.”UPDATE_TRIGGER”

BEFORE UPDATE ON TABLE_NAME

FOR EACH ROW

BEGIN

DBMS_OUTPUT.PUT_LINE(‘A row is updated.’);

END;

–增加删除时触发器

CREATE OR REPLACE TRIGGER “SCHEMA”.”DELETE_TRIGGER”

BEFORE DELETE ON TABLE_NAME

FOR EACH ROW

BEGIN

DBMS_OUTPUT.PUT_LINE(‘A row is deleted.’);

END;

表触发器是行触发器的变种,当表整体进行 插入、更新或删除操作时,它就会被触发。 由于行触发器不能完整执行某一特定的操作, 这时就可以使用表触发器来执行相关操作。具 体示例如下:

–表触发器的创建

CREATE OR REPLACE TRIGGER “SCHEMA”.”TABLE_TRIGGER”

AFTER INSERT OR UPDATE OR DELETE ON TABLE_NAME

FOR EACH ROW

BEGIN

DBMS_OUTPUT.PUT_LINE(‘Table is changed.’);

END;

DML触发器是在用户对数据做插入、更新或 删除操作时来触发某些操作。它们分为三种: BEFORE DML触发器,AFTER DML触发器和INSTEAD OF DML触发器,具体示例如下:

–BEFORE 触发器的创建

CREATE OR REPLACE TRIGGER “SCHEMA”.”BEFORE_TRIGGER”

BEFORE INSERT OR UPDATE OR DELETE ON TABLE_NAME

Begin

DBMS_OUTPUT.PUT_LINE(‘DML operator starts.’);

END;

–AFTER 触发器的创建

CREATE OR REPLACE TRIGGER “SCHEMA”.”AFTER_TRIGGER”

AFTER INSERT OR UPDATE OR DELETE ON TABLE_NAME

Begin

DBMS_OUTPUT.PUT_LINE(‘DML operator finished.’);

END;

–INSTEAD OF 触发器的创建

CREATE OR REPLACE TRIGGER “SCHEMA”.”INSTEAD_OF_TRIGGER”

INSTEAD OF INSERT OR UPDATE OR DELETE ON TABLE_NAME

Begin

DBMS_OUTPUT.PUT_LINE(‘Different DML operator.’);

END;

最后一类触发器就是系统触发器,它是数据 库系统自身定义的触发器,系统比较内部 化,开发者并不能改变其属性,但可以采 用定时器,将系统触发器的操作时间定义为 用户所想要的特定的定时点,可以用 system_trigger 关键字来实现,具体示例如下:

–系统触发器的创建

CREATE OR REPLACE TRIGGER “SCHEMA”.”SYSTEM_TRIGGER”

SYSTEM_TRIGGER

AFTER SCHEDULE ‘5 AM 1 MONTH 7 DAY,5 PM’

DO

BEGIN

DBMS_OUTPUT.PUT_LINE(‘5 AM 1 MONTH 7 DAY,5 PM’);

END;

通过以上4类Oracle触发器,开发者可以通过执 行指定的操作以达到一定的目的,如实现数 据库完


数据运维技术 » 深入认识Oracle触发器的分类类型(oracle触发器类型)