DBMS_UTILITY.FORMAT_ERROR_BACKTRACE:返回当前异常相应的描述,通过它就能知道异常的最初生成处。 系统为最近一次生成的异常设置了一个栈,并跟踪它的传递过程,而这个函数使用这个栈,然后返回该异常的整个传递过程。这个函数对错误的定位和实施下一步处理起着至关重要的作用。 DBMS_UTILITY.FORMAT_ERROR_BACKTRACE 系统为...
在使用DBMS_UTILITY.FORMAT_ERROR_BACKTRACE函数时,需要确保在当前程序的异常处理模块中调用这个函数,以避免在中间程序中错误地处理异常。 还需要注意,如果在堆栈向上传播时重新引发异常,可能会丢失“原始”行号,因为回溯跟踪函数始终只追溯到最近引发的异常。 通过以上信息,您应该能够充分理解DBMS_UTILITY.FORMAT_ERROR_BAC...
以下案例:第7行会报no_data_found 错误 View Code
Dbms_Output.Put_Line(Dbms_Utility.Format_Error_Backtrace); Dbms_Output.Put_Line('---3---'); Dbms_Output.Put_Line(Dbms_Utility.Format_Error_Stack); Dbms_Output.Put_Line('---4---'); Dbms_Output.Put_Line(Dbms_Utility.Format_Call_Stack); End;...
如果数据库是10g及以上版本,可以使用dbms_utility.format_error_backtrace(),这个函数能够返回错误行,可以套用以下格式:create or replace procedure prc_test(参数) is v_no number;begin select no into v_no from zrp;exception when others then dbms_output.put_line('SQL CODE:'||sqlcode||...
使用函数DBMS_UTILITY.FORMAT_ERROR_BACKTRACE可以获取到出现异常时候的程序的行号,而函数DBMS_UTILITY.FORMAT_ERROR_STACK可以获取到出现异常时的错误信息,作用和SQLERRM一样。示例如下所示所示: SYS@lhrdb> SET SERVEROUTPUT ON SYS@lhrdb> DECLARE 2 N1 VARCHAR(10); ...
检查错误堆栈:通过查看错误堆栈信息,可以确定错误发生的位置和原因。可以使用DBMS_UTILITY.FORMAT_ERROR_BACKTRACE函数来获取完整的错误堆栈信息。 调试存储过程或函数:使用调试工具或添加日志语句来跟踪存储过程或函数的执行过程,以找出错误的源头。 在使用Oracle实体化视图时,可以考虑以下腾讯云相关产品和服务: ...
接下来,悄悄在代码埋下一个bug(在动态sql赋值语句中加多一个逗号),运行的结果如下: 从结果可以看出,通过sqlerrm还不容易看出问题含义,但是通过dbms_output.put_line(dbms_utility.format_error_backtrace());可以看出11行的代码EXECUTE IMMEDIATE sql1;有问题。编辑...
DBMS_SQL有bug呀,获取出来的col_max_len是0,例子如下: create table mydual as select * from dual; declare v_col_cnt NUMBER; v_cursorid NUMBER; v_desc_t DBMS_SQL.desc_tab2; begin dbms_output.enable; v_cursorid := DBMS_SQL.open_cursor; ...
Dbms_Output.Put_Line(Dbms_Utility.Format_Error_Backtrace); Dbms_Output.Put_Line('---3---'); Dbms_Output.Put_Line(Dbms_Utility.Format_Error_Stack); Dbms_Output.Put_Line('---4---'); Dbms_Output.Put_Line(Dbms_Utility.Format_Call_Stack); End;...