服务器之家

服务器之家 > 正文

oracle监控某表变动触发器例子(监控增,删,改)

时间:2019-12-08 21:53     来源/作者:oracle教程网

使用oracle触发器 实现对某个表的增改删的监控操作,并记录到另一个表中。

代码:

复制代码代码如下:

create or replace trigger test_trigger  
  before insert or update or delete on test_table  
  for each row  
declare  
  v_id        varchar2(30);  
  v_bdlb      varchar2(1);  
  v_jgdm      VARCHAR2(12);  
  v_jgmc      VARCHAR2(60);  
  v_gajgmc    VARCHAR2(60);  
  v_gajgwsmc  VARCHAR2(30);  
  v_jz        VARCHAR2(30);  
  v_ksdwsdwmc VARCHAR2(30);  
begin  
  /*  
    插入时往历史表中存放的是新插入的数据.  
    修改时往历史表中存放的是修改后的数据.  
    删除时往历史表中存放的是删除之前的数据.  
  */  
  select org_id_s.nextval into v_id from dual; -- 利用seq生成主键  
  v_jgdm     := :new.row_id;  
  v_jgmc     := :new.dept_name;  
  v_gajgmc   := :new.dept_name;  
  v_gajgwsmc := :new.bmjc;  
  v_jz       := substr(v_jgdm, 7, 2);  
  if '2' = :new.depttype then  
    v_ksdwsdwmc := 'shiju';  
  else  
    if '03' = v_jz then  
      v_ksdwsdwmc := 'zhi';  
    elsif '05' = v_jz then  
      v_ksdwsdwmc := 'xing';  
    elsif '51' = v_jz then  
      v_ksdwsdwmc := 'she';  
    else  
      v_ksdwsdwmc := 'qita';  
    end if;  
  end if;  

  if inserting then  
    v_bdlb := '1';  
    insert into test_table_h  
      (id, bdlb, jgdm, jgmc, gajgmc, gajgwsmc, jz, ksdwsdwmc)  
    values  
      (v_id,  
       v_bdlb,  
       v_jgdm,  
       v_jgmc,  
       v_gajgmc,  
       v_gajgwsmc,  
       v_jz,  
       v_ksdwsdwmc);  
  elsif updating then  
    v_bdlb := '2';  
    insert into test_table_h  
      (id, bdlb, jgdm, jgmc, gajgmc, gajgwsmc, jz, ksdwsdwmc)  
    values  
      (v_id,  
       v_bdlb,  
       v_jgdm,  
       v_jgmc,  
       v_gajgmc,  
       v_gajgwsmc,  
       v_jz,  
       v_ksdwsdwmc);  
  else  
    v_bdlb     := '3';  
    v_jgdm     := :old.row_id;  
    v_jgmc     := :old.dept_name;  
    v_gajgmc   := :old.dept_name;  
    v_gajgwsmc := :old.bmjc;  
    v_jz       := substr(v_jgdm, 7, 2);  
    if '2' = :old.depttype then  
      v_ksdwsdwmc := 'shiju';  
    else  
      if '03' = v_jz then  
        v_ksdwsdwmc := 'zhi';  
      elsif '05' = v_jz then  
        v_ksdwsdwmc := 'xing';  
      elsif '51' = v_jz then  
        v_ksdwsdwmc := 'she';  
      else  
        v_ksdwsdwmc := 'qita';  
      end if;  
    end if;  
    insert into test_table_h  
      (id, bdlb, jgdm, jgmc, gajgmc, gajgwsmc, jz, ksdwsdwmc)  
    values  
      (v_id,  
       v_bdlb,  
       v_jgdm,  
       v_jgmc,  
       v_gajgmc,  
       v_gajgwsmc,  
       v_jz,  
       v_ksdwsdwmc);  
  end if;  
end; 
标签:

相关文章

热门资讯

玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
配置IIS网站web服务器的安全策略配置解决方案
配置IIS网站web服务器的安全策略配置解决方案 2019-05-23
Nginx服务器究竟是怎么执行PHP项目
Nginx服务器究竟是怎么执行PHP项目 2019-05-24
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
返回顶部