Oracle 触发器
转自慕课网:http://www.imooc.com/video/8744
触发器的定义
每当一个特定的数据操作语句(insert update delete)在指定的表上发出时,Oracle自动的执行触发器中定义的语句序列
(select语句没有触发器)
在emp 表中插入到一条语句的时候触发一个触发器,触发器打印一句话”成功插入新员工
”
Create trigger saynewemp //创建一个名为saynewemp的触发器
after insert //在insert语句执行完之后执行该触发器
on emp //该触发器作用在那个表上
declare//程序中是否需要使用变量,不需要时省略
begin
dbms_output.put_line('成功插入新员工')
end;
/
类似Java中的监听器
应用场景
1 复杂的安全性检查
2 数据的确认
3 数据库审计 //跟踪数据库中的数据的操作记录
4 数据的备份和同步
触发器类型
1 语句级的触发器(没有for each row 语句则表示是语句级的触发器)
在指定的操作之前或之后执行一次,不管这条语句影响了多少行
2 行级触发器
触发语句作用的每一条记录都被触发.在行级触发器中使用 :old 和 :new 伪记录变量,识别值的状态
语句级的触发器针对的是表
行级触发器针对的是行
insert into emp10 select * from emp where deptno = 10;//将emp表中deptno=10的员工插入到emp10表中(假设可以查出三条记录)
如果是语句触发器则上条SQL会出发一次触发器
而行级触发器会被触发三次
语法 []可有可无
create [or replace] trigger 触发器名称 //创建一个触发器
{before | after}
{delete|insert|update[of 列名]}//update后跟列名表示只有update某一列时才会触发触发器
on 表名
[for each row[when(条件)]]
plsql 块