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 |
示例:一个简单的触发器