Oracle 触发器:分类及应用 (oracle触发器类型)

Oracle 触发器是存储在数据库中的特殊程序,用于当一个事件(如修改表)发生时,执行由用户定义的语句。它们默认只响应在首次和表更新时发生的事件。Oracle 触发器分为3种:%rsBEFORE 触发器,BEFORE 触发器和AFTER 触发器。

BEFORE 触发器是用于在发生更改之前检查或处理数据的触发器。它们允许用户在语句执行真正的更改之前停止它们。试图更改会先激活BEFORE 触发器,然后决定是否执行该语句。

例如,下面的BEFORE 触发器将确保插入记录中的值只有0或1,避免错误值出现:

CREATE OR REPLACE TRIGGER tg_name

BEFORE INSERT ON tab_name

FOR EACH ROW

BEGIN

IF :NEW.val NOT IN ( 0, 1 ) THEN

RAISE_ERROR(‘非法’);

END IF;

END;

/

AFTER 触发器是在发生更改之后执行。AFTER 触发器允许您在更改实际发生之后,执行其他操作。实际更改包括删除,更新或插入。AFTER 触发器可用于执行与实际数据无关的操作,如发送电子邮件,更新其他表以反映该表的更改,根据更改的内容调用其他程序等。

例如,下面的AFTER 触发器将会在表的任何记录被更新时向用户发送电子邮件:

CREATE OR REPLACE TRIGGER tg_name

AFTER UPDATE ON tab_name

FOR EACH ROW

BEGIN

SEND_MAIL(‘someone@example.com’,’Record Updated’);

END;

/

Row Level 触发器是在使用 DML 语句时发生,并逐行处理条目。它将执行事件(如前一种触发器),但是,它每次只处理一行。

例如,下面的 Row Level 触发器将会更新记录中加入新列后记录更新时间:

CREATE OR REPLACE TRIGGER tg_name

BEFORE UPDATE ON tab_name

FOR EACH ROW

BEGIN

:NEW.last_update := SYSDATE;

END;

/

Oracle 触发器可以用于实现数据库完整性,复杂的逻辑操作,以及生成自定义的错误消息,新技术或更新表中的数据。总的来说,这些触发器可以提升数据库效率和灵活性,有助于降低断言受到重大破坏的风险难以恢复的风险。


数据运维技术 » Oracle 触发器:分类及应用 (oracle触发器类型)