精通Oracle触发器:介绍常见类型(oracle触发器类型)

的触发器

Oracle触发器是Oracle数据库中的一种功能,能够自动监测表或表数据的变更情况,从而进行一些操作,是用来替代PL / SQL存储过程完成日常数据库操作的非常有用的工具。下面介绍常见类型的触发器。

一、行级触发器

行级触发器,就是在指定表的数据发生变化时被触发执行的触发器,根据不同类型的变化,可以分成三种:

1. INSERT :它会在新记录插入表中时被触发。一般用来对新插入的记录的初始值做检查和处理。

2. UPDATE:它会在某一列的值发生了变化时被触发,一般用来对发生变化的列做检查和处理。

3. DELETE:它会在删除表的记录时被触发,可以用来保存被删除的记录中的数据,比如某些历史记录。

示例:一个行级触发器的示例,用于监控表中每一行新插入记录时,验证INSERT_DATE是否为当前日期:

CREATE OR REPLACE TRIGGER T_INSERT_DATE

  BEFORE INSERT ON TABLE_T

  REFERENCING NEW AS N

  FOR EACH ROW

BEGIN

  IF (N.INSERT_DATEsysdate) THEN

RAISE_APPLICATION_ERROR(-20000, ‘插入的记录的日期必须为当前日期’);

  END IF;

END;

二、表级触发器

表级触发器是指触发器与表本身关联,无论表中发生什么类型的变化,表级触发器都会被触发,它与行级触发器的区别在于触发器定义在表级,而不是在行级。

同样,它也在BEFORE 和 AFTER 两种时刻中运行,可以同时看到OLD 和 NEW 两个数据集,但是差别在于OLD 与NEW 表示其取值的范围是表中的所有数据,而表级触发器中没有 FOR EACH ROW 语句。

示例:一个表级触发器的示例,用于监控表上任何变更操作时,都要求保证NAME字段处于大写形式:

CREATE OR REPLACE TRIGGER T_NAME_UPPERCASE

  BEFORE INSERT OR UPDATE ON TABLE_T

  REFERENCING NEW AS N

BEGIN

  IF UPPER(N.NAME)N.NAME THEN

  RAISE_APPLICATION_ERROR(-20000, ‘Name字段必须为大写形式’);

  END IF;

END;

三、系统级触发器

系统定义的触发器(系统级触发器)表示系统的特殊事件,在系统发生特定的改变时被触发。

它与表和行级触发器的区别是,它不需要关联任何表,而是识别一些系统特定的操作,比如用户的登录和注销,数据库拆卸和启动等。

系统定义的触发器可以实现复杂的工作流控制和通知构建,比如定时同步数据库或定时发送邮件等。

示例:一个系统级触发器的示例,每次用户登录数据库时,要求返回一个welcome文本:

CREATE OR REPLACE TRIGGER T_WELCOME

  AFTER LOGON ON DATABASE

BEGIN

  DBMS_OUTPUT.PUT_LINE(‘Welcome to Oracle Database’);

END;

精通Oracle触发器,可以让我们更好地控制数据库,让复杂的操作变得更加高效。上述介绍了Oracle触发器的三种常见类型:行级触发器、表级触发器和系统级触发器,分别用于不同场景下


数据运维技术 » 精通Oracle触发器:介绍常见类型(oracle触发器类型)