可获得性
本特性自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=#
相关页面
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




