oracle导出报错936错误,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

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

原文:http://blog.csdn.net/stevendbaguo/article/details/47280677

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值