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