18 Oracle触发器

什么是触发器

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

  • 数据确认
  • 实施复杂的安全性检查
  • 做审计,跟踪表上所做的数据操作等
  • 数据的备份和同步
    触发器分类
  • 前置触发器(BEFORE)
  • 后置触发器(AFTER)

创建触发器的语法

语法:

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.前置触发器
需求:当用户输入本月累计表数后,自动计算出本月使用数 。
代码:

--前置触发器
create or replace trigger tri_account_num1
before
update of num1
on t_account
for each row
declare

begin
  --通过伪记录变量修改usenum字段的值
  :new.usenum:= :new.num1-:new.num0;
    
end;

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

--后置触发器
--创建日志表,记录业主名称修改前和修改后的名称 
create table t_owners_log(
updatetime date,
ownerid number,
oldname varchar2(30),
newname varchar2(30)
);

create or replace trigger tri_owners_log
after
update of name
on t_owners
for each row
declare

begin
  --向日志表插入记录
  insert into t_owners_log values(sysdate,:new.id,:old.name,:new.name);

end;

测试:

--更新数据
update t_owners set name='张八天' where id=3;
commit;

--查询日志表
select * from t_owners_log;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值