存储过程调试

在 DM 数据库中,我们可以利用 DM PL/SQL 进行存储过程及函数的编写。有时,我们编写的程序块中可能会有 BUG 导致编译失败,这种情况下就需要用到相关工具来进行调试。本章节主要介绍两种存储过程的调试方法

使用图形化界面工具进行调试

在有图形化界面的情况下,我们可以利用管理工具来进行匿名块的调试。

  • 调试过程

使用匿名块调试,首先确保已经开启系统包 DEBUG SYSTEM ,然后点击上方的【调试】按钮进入调试,如下图所示:

performance-func-1

创建测试存储过程,并进行调试,如下图所示:

performance-func-2

在弹出新窗口点击绿色三角形按钮进入调试,如下图所示:

performance-func-3

进入调试,依照代码逻辑进行分步调试,显示区域会显示当前变量执行结果,如下图所示:

performance-func-4

遇到报错会终止调试,并显示报错内容,用户可根据报错内容进行代码修改,如下图所示:

performance-func-5

使用 DMDBG 进行调试

当我们没有图形界面,或者通过远程连接服务器的时候,我们也可以利用 DM 提供的命令行调试工具 dmdbg ,来完成同样的任务。

  • 调试过程

dmdbg 跟 disql 同级目录,都在 dmdbms/bin 目录下,登录方式同 disql 如下图所示:

performance-func-dbg-1

使用 help 命令查看参数,如下图所示:

performance-func-dbg-2

注意调试前确保已经开启系统包 DEBUG SYSTEM,创建完成后,我们登录到 dmdbg 中,这里直接引用刚才创建的测试存储过程,然后把 call TEST_DMDBG; 放到 SQL 内,如下所示:

DBG> sql call TEST_DMDBG;

然后我们添加断点,从头开始调试,因此会将断点放到最开始的位置,可以在需要的行数打上断点,如下所示:

DBG> B 0
Breakpoint 1 at @dbg_main, line: 1@{call TEST_DMDBG;}

接下来我们输入 r,开始 debug,如下所示:

DBG> r
Breakpoint 1,  line: 1@{call TEST_DMDBG;}

输入 s,进入到循环里调试,如下所示:

DBG> s
SYSDBA.TEST_DMDBG line: 5       @{   for i in 1..3}
DBG> s
SYSDBA.TEST_DMDBG line: 7       @{     aa = 1 / (3-i);}

输入 bt,可以查看当前的堆栈,如下所示:

DBG> bt
\#0      SYSDBA.TEST_DMDBG()     line: 7@{     aa = 1 / (3-i);}
\#1      @dbg_main       line: 1@{call TEST_DMDBG;}

如果我们想要查看当前变量的数值,可以通过 P 变量名的方式输出打印,如下所示:

DBG> p aa
$3 = 0
DBG> s
[TEST_DMDBG] 除0错误.error code=-6103

报错停止。

微信扫码
分享文档
扫一扫
联系客服