oracle语句级触发器使用操作的历史数据

在oracle中,触发器分为三类,行触发,语句触发、替代触发,这里讨论语句触发,因为在语句级触发器没有new和OLd可以访问历史数据,但是很多情况是必须使用这些刚刚更新或删除的数据进行其他操作,下面提供一种解决方法:首先定义一种表类型  的结构,然后创建一个行级触发器,这个触发器仅做一个操作,就是利用old、new记录刚刚操作的数据,然后创建一个语句级触发器,在这个语句级触发器里面执行相应的业务操作。具体实现如下:(两个表f分别为aaaa,aaaa_log,功能就是删除aaaa的数据记录到aaaa_log中)

  

 -- 创建一个包 ,
create or replace package tri_pkg
 as
 type TempTable  is table of aaaa%rowtype index by binary_integer ;
 oldrows  TempTable;
 oldemptyrows  TempTable;
 end  tri_pkg;
 
 -- 做删除前清空初始化数据
  create or replace trigger aaaa_delete_empty
before delete
on  aaaa
  begin
tri_pkg.oldrows:=tri_pkg.oldemptyrows;
end;
 
-- 行级触发器记录删除的记录
create or replace trigger aaaa_delete_row
AFTER delete
on  aaaa
for each row
declare
    num integer  :=tri_pkg.oldrows.COUNT+1;
begin  
tri_pkg.oldrows(num).name:=:old.name;
tri_pkg.oldrows(num).birthdate:=:old.birthdate;
end;
 
-- 语句触发器操作业务 
create or replace trigger aaaa_delete
AFTER delete
on  aaaa
     declare 
begin      
for i in 1..tri_pkg.oldrows.COUNT loop   
insert into aaaa_log(name,birthdate)  select   tri_pkg.oldrows(i).name ,tri_pkg.oldrows(i).birthdate
from  dual;
end loop; 
end;

 

转载请注明地址:

http://yuexiaodong.iteye.com/blog/1887375

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值