暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MogDB 支持dbms_utility.format_error_backtrace

原创 MogDB 2024-08-06
200

可获得性

本特性自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

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

评论