设为首页 收藏本站
查看: 808|回复: 0

[经验分享] ORACLE 存储过程中保存用户自定义异常信息的一种方式

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-3-6 11:25:02 | 显示全部楼层 |阅读模式


1.创建错误日志表:
create table REP_LOGS
(
  log_s_no NUMBER not null,
  log_date DATE default sysdate not null,
  log_type VARCHAR2(1) default 'E' not null,
  log_node VARCHAR2(60) not null,
  log_mesg VARCHAR2(300) not null
);

-- Add comments to the table
comment on table REP_LOGS
  is '系统操作日志信息表';
-- Add comments to the columns
comment on column REP_LOGS.log_s_no
  is '日志序列号 由序列SEQ_REP_LOGS生成';
comment on column REP_LOGS.log_date
  is '日志时间';
comment on column REP_LOGS.log_type
  is '日志类型 ''E'':异常(默认);''N'':正常;''W'':警告';
comment on column REP_LOGS.log_node
  is '写入日志的节点';
comment on column REP_LOGS.log_mesg
  is '详细信息';

2.创建用于向上述日志表中写数据的存储过程(独立事物)
create or replace procedure p_messagelogging(str_i_logtype in varchar2,
                                                 str_i_lognode in varchar2,
                                                 str_i_logmesg in varchar2)
/*************************************************************************
**    Name :      p_messagelogging
**    Purpose :   记录日志
*************************************************************************/
is
    pragma autonomous_transaction;
begin
    insert into rep_logs(log_s_no, log_type, log_node, log_mesg)
    values(seq_rep_logs.nextval, str_i_logtype, str_i_lognode, str_i_logmesg);
    commit;
end p_messagelogging;
3.在存储过程中捕获异常并使用上述存储过程记录错误信息。
create or replace procedure p_myproc(arg1 in number, arg2 in varchar2)
is
     str_l_errmsg rep_logs.log_mesg%type; --异常信息
    str_l_errloc varchar2(30);
begin
     str_l_errloc:='my mark 1';
     .....
     str_l_errloc:='my mark 2';
exception
     when others then
     str_l_errmsg := substrb('Tips:'||str_l_errloc || '-' || sqlerrm, 1, 300);
     p_messagelogging('error type', 'current procedure name', str_l_errmsg);
     raise;
end p_myproc;

通过这种方式(再配合自定义异常),可以在程序出错的时候,根据日志表查找出出错的存储过程名以及详细代码位置,特别是在存储过程嵌套调用层次很深的时候,上述处理方式会很有用,这也是ORACLE自治事物最常用的场合。








运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-15509-1-1.html 上篇帖子: oracle10~11g在centos5~6版本上安装整体总结如下 下篇帖子: oracle 11g 使用物化视图远程增量刷新数据 信息 用户
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表