oracle创建触发器(例:当有操作x_yonghu表指定字段并且字段有修改时,插入日志表)

Posted 微笑在嘴边~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle创建触发器(例:当有操作x_yonghu表指定字段并且字段有修改时,插入日志表)相关的知识,希望对你有一定的参考价值。

最近总发现用户表一些数据被删了,找不到原因,后面通过创建触发器来排查,当有操作x_yonghu表时,记录下来插入日志表中。

create or replace trigger trg_x_yonghu_log_aft_modify

  after update OF shouji, zigezhenghao,zidianshurufa,shurufa on x_yonghu

  for each row

declare

  pri_sqlcode  varchar2(100);

  pri_sqlerrm  varchar2(4000);

  pri_username varchar2(50);

  pri_ip       varchar2(100);

  pri_host     varchar2(200);

  pri_type     varchar2(100);

begin

    pri_username := sys_context(userenv, session_user);

    pri_ip       := sys_context(userenv, ip_address);

    pri_host     := sys_context(userenv, host);

    pri_type     := update;

 case when updating(shouji) or updating(zidianshurufa) or updating(shurufa) then

    if :new.shouji != :old.shouji  or  :new.zidianshurufa != :old.zidianshurufa  or :new.shurufa != :old.shurufa then

      insert into x_yonghu_log

        (yonghuid_old,

         yiyuanid_old,

         zidianshurufa_old,

         shurufa_old,

         shouji_old,

         zigezhenghao_old,

         yonghuid_new,

         yiyuanid_new,

         zidianshurufa_new,

         shurufa_new,

         shouji_new,

         zigezhenghao_new,

         modify_host,

         modify_ip,

         modify_username,

         modify_type)

      values

        (:old.yonghuid,

         :old.yiyuanid,

         :old.zidianshurufa,

         :old.shurufa,

         :old.shouji,

         :old.zigezhenghao,

         :new.yonghuid,

         :new.yiyuanid,

         :new.zidianshurufa,

         :new.shurufa,

         :new.shouji,

         :new.zigezhenghao,

         pri_host,

         pri_ip,

         pri_username,

         pri_type);

    end if;

  end case;

exception

  when others then

    begin

      pri_sqlcode := sqlcode;

      pri_sqlerrm := sqlerrm;

      insert into x_yonghu_log

        (modify_username,

         modify_ip,

         modify_host,

         modify_type,

         errormsg_sqlcode,

         errormsg_sqlerrm)

      values

        (pri_username,

         pri_ip,

         pri_host,

         pri_type,

         pri_sqlcode,

         pri_sqlerrm);

end;

end;

 

以上是关于oracle创建触发器(例:当有操作x_yonghu表指定字段并且字段有修改时,插入日志表)的主要内容,如果未能解决你的问题,请参考以下文章

Oracle数据库基本操作五——存储过程与触发器

oracle 触发器 学习复习用

Oracle数据库——触发器的创建与应用

Oracle数据库——触发器的创建与应用

oracle---触发器

oracle触发器使用