• BEFORE INSERT FOR EACH ROW

  • BEFORE UPDATE FOR EACH ROW

  • AFTER UPDATE FOR EACH ROW

  • BEFORE DELETE FOR EACH ROW

触发器名与过程名和包的名字不一样,它是单独的名字空间,因而触发器名可以和表或过程有相同的名字。

创建触发器的语法如下:

参数解释如下表:

注意

当一个基表被修改(INSERT, UPDATE, DELETE)时要执行的存储过程,执行时根据其所依附的基表改动而自动触发,因此与应用程序无关,用触发器可以保证数据的一致性和完整性。

触发器使用限制

触发器有如下使用限制:

  • 触发器内部的 SELECT 语句只能为结构,或者为定义游标所使用的 SELECT 语句。

  • 触发器中不能使用数据库事务控制语句 COMMIT,ROLLBACK 和 SVAEPOINT 语句。

  • 由触发器所调用的过程或函数也不能使用数据库事务控制语句。

OLD 和 NEW 伪记录

当触发器被触发时,要引用被插入(INSERT)、更新(UPDATE)或删除(DELETE)的记录中的列值,有时要使用操作前或操作后列的值,语法如下:

  • 用于修饰符访问操作完成前列的值

使用有效性如下表:

特性

INSERT

UPDATE

DELETE

OLD

NULL

有效

有效

NEW

有效

有效

NULL

示例:一个简单的触发器