Oracle错误处理打印错误行数 dbms_utility.format_error_backtrace的使用

本文展示了如何在Oracle数据库中创建日志表、测试表并插入数据,然后定义一个存储过程来处理异常。当存储过程中发生错误时,使用DBMS_UTILITY.FORMAT_ERROR_BACKTRACE捕获错误信息,并将这些信息记录到日志表中,这对于故障排查非常有帮助。
摘要由CSDN通过智能技术生成

##创建日志表
create table t_error_log
(
  pro_name     varchar2(300),
  error_desc    varchar2(2000),
  exec_date     date
);

##创建测试表
create table test_error_stack(
 id number primary key
);

##插入测试数据
insert into test_error_stack values (1);
commit;

##创建存储过程
create or replace procedure pr_error_code_test
is
v_backtrace    varchar2(1000);       --返回错误行
v_error        varchar2(1000);       --整合错误内容

begin
--要执行的sql语句
  INSERT INTO test_error_stack values (2);
  INSERT INTO test_error_stack values (1);   --这条数据会报错,违反唯一约束
  commit;
--异常错误记录处理
exception
  when others then
   v_backtrace:=dbms_utility.format_error_backtrace;
   rollback;
   v_error:='异常错误为:'||v_backtrace;
   insert into t_pro_error_log(pro_name,error_desc,exec_date)
   values('pr_error_code_test',v_error,sysdate);
   commit;
   return;
    
end pr_error_code_test;
/


##执行存储过程
exec pr_error_code_test;

##检查结果
SQL> select * from t_error_log;

 
PRO_NAME                                                              ERROR_DESC                                                               EXEC_DATE
-------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------- -----------
pr_error_code_test                                                  异常错误为:ORA-06512: 在 "PR_ERROR_CODE_TEST", line 9                      2020/10/14
 
SQL> 


SQL> select * from test_error_stack;
 
        ID
----------
         1
 
SQL> 

##结论
通过dbms_utility.format_error_backtrace包可以打印存储过程中出错的位置,对于问题分析很有帮助

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值