一、概念
触发器是Oracle数据库的对象,类似存储过程和函数。存储过程和函数需要用户显示调用才执行,而触发器是由一个事件来触发运行,当某个事件发生时会自动地隐式运行,不能被显示的调用。
触发器的本质是存储过程,发生特定事件时Oracle会执行触发器中的代码,它的组成可以分为三个部分:
-
触发器执行的条件,即触发器被触发的事件
-
执行触发器的时间,发生事件之前(before)或发生事件之后(after)
-
触发器要做的事情,就是触发器被触发以后具体想执行的任务(PL/SQL语句块)
二、DML触发器
基于DML操作的触发器,细分又可以分为行触发器和语句触发器。
2.1、语句触发器
DML操作(insert、delete、update),不管SQL语句影响的记录是多少行,触发器只触发一次。
2.2、行级触发器
DML操作(insert、delete、update),SQL语句影响了多少行记录,触发器就触发多少次。
行级触发器用for each row关键字。
2.3、DML触发器语法:
create [or replace] trigger 用户名.触发器名
{
before|after}
{
delete|insert|update|[of列名]}
on 表名
[for each row [when 条件]]
declare
定义变量。
begin
PL/SQL语句块。
end;
参数说明:
{before|after}: 指定触发器是在对表的操作发生之前触发还是之后触发。
{delete|insert|update|[of列名]}: 触发在动作,可以指定多个动作,例如:insert or update。如果是update,upd