Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 440|回复: 0

Oracle存储过程记录异常

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-7-13 12:14:18 | 显示全部楼层 |阅读模式

    对于Oracle的存储过程,抛出异常可以抛向代码或是用表记录。如果你的系统应用有很多节点,像我们40个节点,如果抛错抛到代码里面,错误根本就无法找到,最好是错误用表记录。记录错误的这个功能最好是通用的

      1 --建立错误日志表
      2 
      3 create table PUB_PROC_ERR_LOG
      4 (
      5 LOG_ID NUMBER,
      6 MODULE_NAME VARCHAR2(100),
      7 PROC_NAME VARCHAR2(100),
      8 ERR_TIME DATE,
      9 SQL_CODE VARCHAR2(50),
     10 SQL_ERRM VARCHAR2(100),
     11 ERR_CONTENT VARCHAR2(500)
     12 );
     13 comment on column PUB_PROC_ERR_LOG.LOG_ID is '主键';
     14 comment on column PUB_PROC_ERR_LOG.MODULE_NAME is '模块名称';
     15 comment on column PUB_PROC_ERR_LOG.PROC_NAME is '存储过程名称';
     16 comment on column PUB_PROC_ERR_LOG.ERR_TIME is '报错时间';
     17 comment on column PUB_PROC_ERR_LOG.SQL_CODE is 'SQLCODE';
     18 comment on column PUB_PROC_ERR_LOG.SQL_ERRM is 'SQLERRM';
     19 comment on column PUB_PROC_ERR_LOG.ERR_CONTENT is '报错的具体行';
     20 
     21 --表主键的序列
     22 
     23 create sequence SEQ_RECORD_PROC_ERR
     24 minvalue 1
     25 maxvalue 9999999999999999999999999999
     26 start with 21
     27 increment by 1
     28 cache 20;
     29 
     30 --通用记录错误存储过程
     31 
     32 CREATE OR REPLACE PROCEDURE
     33 record_proc_err_log(module_name varchar2,
     34 proc_name varchar2,
     35 v_SQLCODE varchar2,
     36 v_SQLERRM varchar2,
     37 v_err_line varchar2) is
     38 PRAGMA AUTONOMOUS_TRANSACTION;
     39 BEGIN
     40 insert into pub_proc_err_log
     41 (log_id,
     42 module_name,
     43 proc_name,
     44 err_time,
     45 sql_code,
     46 sql_errm,
     47 err_content)
     48 values
     49 (seq_record_proc_err.nextval,
     50 module_name,
     51 proc_name,
     52 sysdate,
     53 v_SQLCODE,
     54 v_SQLERRM,
     55 v_err_line);
     56 commit;
     57 END record_proc_err_log;
     58 
     59 --进行测试
     60 
     61 create or replace procedure test_p1 is
     62 begin
     63 execute IMMEDIATE 'select from test';
     64 exception
     65 when others then
     66 record_proc_err_log('模块名','test_p1',SQLCODE,SQLERRM,
     67 substr(dbms_utility.format_error_backtrace, 1, 400));
     68 end test_p1;
     69 
     70 SQL> col proc_name format a8;
     71 SQL> col err_time format a10;
     72 SQL> col sql_code format a5;
     73 SQL> col SQL_ERRM format a22;
     74 SQL> col ERR_CONTENT format a42;
     75 SQL> select proc_name,err_time,sql_code,SQL_ERRM,ERR_CONTENT from pub_proc_err_log;
     76 PROC_NAM ERR_TIME SQL_C SQL_ERRM ERR_CONTENT
     77 -------- ---------- ----- ---------------------- ------------------------------------------
     78 test_p1 08-12月-14 -936 ORA-00936: 缺失表达式 ORA-06512: 在 "LCAM_TEST.TEST_P1", line 3
     79 
    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-12-23 08:24 , Processed in 0.057414 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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