各位用户为了找寻关于oracle监控某表变动触发器例子(监控增,删,改)的资料费劲了很多周折。这里教程网为您整理了关于oracle监控某表变动触发器例子(监控增,删,改)的相关资料,仅供查阅,以下为您介绍关于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;