使用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, 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,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, v_ksdwsdwmc); end if; end;
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|