文档中心MogDBMogDB StackUqbar
v5.0

文档:v5.0

支持的版本:

其他版本:

支持dbms_utility.format_error_backtrace

可获得性

本特性自MogDB 5.0.0版本开始引入。

特性简介

dbms_utility.format_error_backtrace用于获取存储过程异常的具体出处,输出一个格式化的字符串堆栈,堆栈中程序及其行号可以追溯到错误最先抛出的那一行。因此此接口只能用于存储过程异常时调用。

此接口在whale插件中实现,因此前提条件是先创建了whale插件。如果需要打印出堆栈信息,需要使用dbms_output.put_line。

客户价值

增强MogDB与Oracle的兼容性,减少应用程序的迁移代价。

特性约束

  • dbms_utility.format_error_backtrace只能使用在存储过程procedure的exception部分,不支持function。

  • 如果需要打印dbms_utility.format_error_backtrace的内容,需要使用dbms_output.put_line接口。

    使用dbms_output.put_line接口之前需要先执行以下SQL语句:

    select dbms_output.enable(***)-- 表示开启dbms_output包。
    
    set serveroutput to on;
    -- 表示支持打印数据
  • format_error_backtrace打印的行数是指所在层存储过程的行数,并不是展开后的所有存储过程的行数。

  • 支持把format_error_backtrace作为默认值插入到存储过程

示例

-- 需要先创建whale插件

MogDB=# set whale.serveroutput to on;
SET

MogDB=# select dbms_output.enable(10000);
 enable
--------

(1 row)
-- dbms_utility.format_error_backtrace记录异常堆栈信息

MogDB=# Create or replace procedure proc1 is
MogDB$# Begin
MogDB$# Dbms_output.put_line('running proc1');
MogDB$# Raise no_data_found;
MogDB$# End;
MogDB$# /
CREATE PROCEDURE
MogDB=# create or replace procedure proc2 is
MogDB$# begin
MogDB$# dbms_output.put_line('calling proc1');
MogDB$# dbms_output.put_line('---------------');
MogDB$# proc1;
MogDB$# end;
MogDB$# /
CREATE PROCEDURE
MogDB=#
MogDB=# create or replace procedure proc3 is
MogDB$# begin
MogDB$# dbms_output.put_line('calling proc2');
MogDB$# proc2;
MogDB$# exception
MogDB$# when no_data_found
MogDB$# then
MogDB$# dbms_output.put_line('error stack at top level');
MogDB$# dbms_output.put_line(dbms_utility.format_error_backtrace);
MogDB$# end;
MogDB$# /
CREATE PROCEDURE

MogDB=# begin
MogDB$# dbms_output.put_line('proc3->proc2->proc1 backtrace');
MogDB$# proc3;
MogDB$# end;
MogDB$# /
proc3->proc2->proc1 backtrace
calling proc2
calling proc1
---------------
running proc1
error stack at top level
P0002: at "public.proc1", line 4
P0002: at "public.proc2", line 5
P0002: at "public.proc3", line 4

ANONYMOUS BLOCK EXECUTE
MogDB=#
-- dbms_utility.format_error_backtrace可以作为参数默认值

MogDB=# create or replace  procedure proc_test_a(i_err_bt varchar2 default dbms_utility.format_error_backtrace,i_sqlerm varchar2 default 'ddd') is
MogDB$# begin
MogDB$#   dbms_output.put_line('proc_test_a');
MogDB$#   dbms_output.put_line(i_err_bt ||i_sqlerm);
MogDB$# end;
MogDB$# /
CREATE PROCEDURE
MogDB=#

MogDB=# declare
MogDB-#   a int;
MogDB-# begin
MogDB$#   a := 'abc';
MogDB$# exception
MogDB$#   when others then
MogDB$#      proc_test_a;
MogDB$# end;
MogDB$# /
proc_test_a
ddd
ANONYMOUS BLOCK EXECUTE
MogDB=#

相关页面

whale

Copyright © 2011-2024 www.enmotech.com All rights reserved.