当前位置:数据库 > Oracle >>

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

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;
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,