龙空技术网

详解Oracle数据库DBMS_UTILITY包及如何查看异常详情

波波说运维 374

前言:

现在兄弟们对“oracle过程exception”大概比较注意,兄弟们都需要了解一些“oracle过程exception”的相关文章。那么小编在网上搜集了一些关于“oracle过程exception””的相关知识,希望姐妹们能喜欢,兄弟们一起来学习一下吧!

概述

今天主要介绍一下怎么用DBMS_UTILITY来查看异常,帮助我们平时解决Oracle的一些问题。

一、查看异常常用方法:

1、DBMS_UTILITY.FORMAT_ERROR_BACKTRACE

说明:这是在Oracle 10g数据库引入的,DBMS_UTILITY.FORMAT_ERROR_BACKTRACE内置函数返回一个格式化的字符串堆栈,堆栈中的程序及其行号可以回溯到错误被最先抛出的那一行。

范例:ORA-06512: at "DB.TEST", line 22

2、DBMS_UTILITY.FORMAT_ERROR_STACK

说明:这是在Oracle7中引入的,DBMS_UTILITY.FORMAT_ERROR_STACK 这个内置函数和SQLERRM一样,返回的是和当前错误(SQLCODE返回的值)所关联的错误信息。

范例:ORA-01476: divisor is equal to zero

3、DBMS_UTILITY.FORMAT_CALL_STACK

说明:这是在Oracle7中引入的,DBMS_UTILITY.FORMAT_CALL_STACK这个内置函数返回一个格式化的字符串,它显示了执行调用堆栈:直至此函数的调用点处的所有过程或者函数的调用顺序。换句话说,这个函数回答了这个问题:“我是怎么来到这里的?”

范例:

----- PL/SQL Call Stack -----object line objecthandle number name00007FFA6A87CB30 31 function LTR.TEST_PAYMENT_LOGGING00007FFA6A7C8268 3 anonymous block
二、常用脚本

1、Displays the current call stack.

SET SERVEROUTPUT ONDECLARE v_stack VARCHAR2(2000);BEGIN v_stack := Dbms_Utility.Format_Call_Stack; Dbms_Output.Put_Line(v_stack);END;/

2、Displays contents of the error stack.

SET SERVEROUTPUT ONDECLARE v_stack VARCHAR2(2000);BEGIN v_stack := Dbms_Utility.Format_Error_Stack; Dbms_Output.Put_Line(v_stack);END;/
三、存储过程范例:
create or replace procedure spTest(pId number, res out number) isbegin /* SQL query */ commit; res := 1;exception when others then DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM); DBMS_OUTPUT.PUT_LINE('FORMAT_ERROR_BACKTRACE:' || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE); DBMS_OUTPUT.PUT_LINE('FORMAT_ERROR_STACK:' || DBMS_UTILITY.FORMAT_ERROR_STACK); DBMS_OUTPUT.PUT_LINE('FORMAT_CALL_STACK:' || DBMS_UTILITY.FORMAT_CALL_STACK); rollback; res := 0;end;

觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

标签: #oracle过程exception