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;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值