9.触发器

1.1什么是触发器

数据库触发器是一个与表相关联的、存储的PL/SQL程序。每当一个特定的数据操作语句(Insert,update,delete)在指定的表上发出时,Oracle自动地执行触发器中定义的语句序列。

触发器可用于

  1. 数据确认 
  2. 实施复杂的安全性检查
  3. 做审计,跟踪表上所做的数据操作等
  4. 数据的备份和同步

触发器分类

  1. 前置触发器(BEFORE) 
  2. 后置触发器(AFTER)

1.2.创建触发器的语法

语法:

CREATE  [or REPLACE] TRIGGER  触发器名

   BEFORE | AFTER

   [DELETE ][[or] INSERT] [[or]UPDATE [OF 列名]]

   ON  表名

   [FOR EACH ROW  ][WHEN(条件)]

declare

    ……

begin

   PLSQL

End

 

FOR EACH ROW 作用是标注此触发器是行级触发器   语句级触发器

在触发器中触发语句与伪记录变量的值

 

触发语句

:old

:new

Insert

所有字段都是空(null)

将要插入的数据

Update

更新以前该行的值

更新后的值

delete

删除以前该行的值

所有字段都是空(null)

1.3.触发器案例

1.3.1.前置触发器

需求:当用户输入本月累计表数后,自动计算出本月使用数 。

 

代码:

create or replace trigger tri_account_updatenum1

before

update of num1

on t_account

for each row

declare

begin

  :new.usenum:=:new.num1-:new.num0;

end;

 

1.3.2.后置触发器

需求:当用户修改了业主信息表的数据时记录修改前与修改后的值

--创建业主名称修改日志表:用于记录业主更改前后的名称

create table t_owners_log

(

updatetime date,

ownerid number,

oldname varchar2(30),

newname varchar2(30)

);

 

--创建后置触发器,自动记录业主更改前后日志

create trigger tri_owners_log

after

update of name

on t_owners

for each row

declare

 

begin

  insert into t_owners_log values(sysdate,:old.id,:old.name,:new.name);

end;

 

测试:

--更新数据

update t_owners set name='杨小花' where id=3;

commit;

--查询日志表

select * from t_owners_log;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值