oracle 存储过程最好的记录错误方式

当你的应用有调用存储过程,而节点有几十个或者上百个,找错是不是一个很麻烦的事情,这个时候,我建议写到数据库中,下面是我做的一个demo.

1. 建立错误日志记录表

drop table PUB_PROC_ERR_LOG purge;

create table PUB_PROC_ERR_LOG

(

LOG_ID      NUMBER,

MODULE_NAME VARCHAR2(100),

PROC_NAME   VARCHAR2(100),

ERR_TIME    DATE,

SQL_CODE    VARCHAR2(50),

SQL_ERRM    VARCHAR2(100),

ERR_CONTENT VARCHAR2(500)

);

comment on column PUB_PROC_ERR_LOG.LOG_ID is ‘主键‘;

comment on column PUB_PROC_ERR_LOG.MODULE_NAME  is ‘模块名称‘;

comment on column PUB_PROC_ERR_LOG.PROC_NAME  is ‘存储过程名称‘;

comment on column PUB_PROC_ERR_LOG.ERR_TIME  is ‘报错时间‘;

comment on column PUB_PROC_ERR_LOG.SQL_CODE  is ‘SQLCODE‘;

comment on column PUB_PROC_ERR_LOG.SQL_ERRM  is ‘SQLERRM‘;

comment on column PUB_PROC_ERR_LOG.ERR_CONTENT  is ‘报错的具体行‘;

2. 表主键的序列

create sequence SEQ_RECORD_PROC_ERR

minvalue 1

maxvalue 9999999999999999999999999999

start with 21

increment by 1

cache 20;

3.通用记录错误存储过程,用自治事务

CREATE OR REPLACE PROCEDURE

record_proc_err_log(module_name varchar2,

proc_name   varchar2,

v_SQLCODE   varchar2,

v_SQLERRM   varchar2,

v_err_line  varchar2) is

PRAGMA AUTONOMOUS_TRANSACTION;

BEGIN

insert into pub_proc_err_log

(log_id,

module_name,

proc_name,

err_time,

sql_code,

sql_errm,

err_content)

values

(seq_record_proc_err.nextval,

module_name,

proc_name,

sysdate,

v_SQLCODE,

v_SQLERRM,

v_err_line);

commit;

END record_proc_err_log;

4.测试一下

CREATE OR REPLACE PROCEDURE proce_test

is

BEGIN

EXECUTE IMMEDIATE ‘delete from test2 where‘;

Exception

WHEN OTHERS Then

record_proc_err_log(‘模块名‘,‘proce_test()‘,SQLCODE,SQLERRM,

substr(dbms_utility.format_error_backtrace, 1, 400));

--raise; 如果是java代码调用存储过程,则需要写这一段,让存储过程错误上抛

END proce_test;

SQL> exec proce_test();

BEGIN proce_test(); END;

*

第 1 行出现错误:

ORA-00936: 缺失表达式

ORA-06512: 在 "LCAMTEST.PROCE_TEST", line 9

ORA-06512: 在 line 1

SQL> select * from pub_proc_err_log;

LOG_ID  MODULE_NAME  PROC_NAME    ERR_TIME   SQL_CODE  SQL_ERRM                    ERR_CONTENT

10     模块名   proce_test()  04-8月 -15   -936     ORA-00936: 缺失表达式   ORA-06512: 在 "LCAMTEST.PROCE_TEST", line 4

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-13 12:53:32

oracle 存储过程最好的记录错误方式的相关文章

mybatis springmvc调用oracle存储过程,返回记录集

参考: http://bbs.csdn.net/topics/390866155 辅助参考: http://www.2cto.com/kf/201307/226848.html http://blog.csdn.net/grhlove123/article/details/7549290 在smm中,这样的controller编写方式是不一样的: 存储过程: create or replace procedure pro_getchart(chart_cur out sys_refcursor)

oracle存储过程代码日志记录

prompt 创建函数 f_getprocnameCREATE OR REPLACE FUNCTION f_getprocname RETURN VARCHAR2--获取函数或者存储过程自身的名称及调用者 IS l_owner VARCHAR2(30); l_name VARCHAR2(30); l_lineno NUMBER; l_type VARCHAR2(30);BEGIN OWA_UTIL.who_called_me(l_owner, l_name, l_lineno, l_type);

oracle 存储过程 变量的声明和赋值的3种方式

oracle 存储过程 变量的声明和赋值的3种方式 CreationTime--2018年8月31日16点00分 Author:Marydon 1.声明变量的3种方式 按照数据类型的声明方式进行区分 方式一:直接声明数据类型 格式:变量名 数据类型(大小) V_START_DATE VARCHAR2(19); v_num number; 说明: 设置为字符串类型时,需要指定大小,否则报错: 变量的声明必须在"begin"关键字之前进行. --错误用法 BEGIN v_sql varch

oracle存储过程错误跟踪

1.首先创建用于保存错误信息的表 1 2 3 4 5 6 7 8 CREATE TABLE TBL_PROC_ERRMSG (   BIZ_CODE VARCHAR2(50),   ERR_LINE VARCHAR2(10),   ERR_CODE VARCHAR2(10),   MSG VARCHAR2(200),   CRT_TM   DATE DEFAULT SYSDATE ); 2.创建保存错误信息的存过 1 2 3 4 5 6 7 8 9 10 11 12 13 CREATE OR R

项目中oracle存储过程记录——常用语法备忘

项目中oracle存储过程记录--常用语法备忘 项目中需要写一个oracle存储过程,需求是收集一个复杂查询的内容(涉及到多张表),然后把符合条件的记录插入到目标表中.其中原表之一的日期字段是timestamp类型,目标表的字段是varchar2类型: 其中一些内容很常用,所以做下记录,供查找. 1.存储过程的格式 oracle存储过程和函数都可以实现,一般没有返回值,则采用存储过程,函数比sqlserver的功能强大.oracle变量定义最好加上前缀如V_,查询条件中变量名称和字段名称不能重复

Oracle存储过程记录异常

--建立错误日志表 create table PUB_PROC_ERR_LOG ( LOG_ID NUMBER, MODULE_NAME VARCHAR2(100), PROC_NAME VARCHAR2(100), ERR_TIME DATE, SQL_CODE VARCHAR2(50), SQL_ERRM VARCHAR2(100), ERR_CONTENT VARCHAR2(500) ); comment on column PUB_PROC_ERR_LOG.LOG_ID is '主键';

ASP.NET记录错误日志的方式

程序记录错误日志是一种看起来对一般用户没什么作用,但对程序开发者用处很大的东西,它能查出错误或异常的程序马迹.那么,常用的记录错误日志的方式有哪些呢? 大多数情况下使用的是 1.直接记录为txt/xml文件 2.Windows Event Log 其他记录错误日志的方式 1.当前进程的本地队列 没有简单高效的持久化机制实现,单次调用效率会降低 2.MSMQ (1).非进程内消息队列,单次调用速度上,没有进程内部本地队列速度快 (2).内建持久化机制,即便down机,信息也不会丢失 (3).能简单

Oracle存储过程——日常记录

代码规范 Oracle存储过程,关键字大写,变量小写并以v_开头,规范代码,提高可读性 赋值与判断符号 Oracle存储过程,变量赋值使用 := 符号,条件判断直接用 = 符号. 变量声明需在 begin…end 代码块之外. If语句 if语句中,if后不用加 ( ) , 代码前加then: else if写法为elsif,elsif与else都是可选: 结尾必须有end if: 标准结构如下: if…then …… elsif…then  --可选(多个) …… else       --可

oracle存储过程实例

oracle存储过程实例 分类: 数据(仓)库及处理 2010-05-03 17:15 1055人阅读 评论(2)收藏 举报 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块.但存储过程和函数不同于已经介绍过的PL/SQL程序,我们通常把PL/SQL程序称为无名块,而存储过程和函数是以命名的方式存储于数据库中的.和PL/SQL程序相比,存储过程有非常多长处,详细归纳例如以下: * 存储过程和函数以命名的数据库对象形式存储于数据库其中.存储在数据库中的长处是非