1.5.2 命令行工具dmdbg
dmdbg是达梦数据库提供的用于调试DM SQL程序的命令行工具,安装达梦数据库管理系统后,在安装目录的“bin”子目录下可找到dmdbg执行程序。使用dmdbg,首先要调用系统过程SP_INIT_DBG_SYS(1)创建调试所需要的包。
1.工具状态及调试命令
dmdbg在整个运行过程中可以处于初始状态(S)、待执行状态(W)、执行状态(R)、调试状态(D)、执行结束状态(O)等不同的状态。
(1)初始状态(S):工具启动完成后,尚未设置调试语句。
(2)待执行状态(W):设置调试语句后,等待用户执行。
(3)执行状态(R):开始执行后,未中断而运行的过程。
(4)调试状态(D):执行到断点或强制中断后进入交互模式。
(5)执行结束状态(O):执行完当前设置的调试语句,并返回结果。
dmdbg在不同的状态下可以执行不同的操作,如表1-11所示,其中备注表示不同的命令分别在哪几种状态下可以使用。
表1-11 dmdbg的调试命令

2.调试过程
下面以第3章例3-5中的存储过程“p_salarysum_ bycityname”为例,介绍应用dmdbg的方法。
第1步,登录。双击“dmdbg.exe”文件执行程序,进入dmdbg命令行工具窗口。在命令行工具窗口输入“LOGIN”命令进行登录,会提示用户输入服务名(LOCALHOST)、用户名(DMHR)、密码(dameng123)、端口号(5236)、SSL路径和SSL密码。
第2步,设置调试用的SQL语句。如果SQL是单条语句,则以分号“;”结尾;如果是程序块,则程序块后必须以单独一行的斜杠符“/”结束。在调试中行数从SQL语句实际起始行开始计数。在命令行工具窗口输入如下命令:

第3步,显示脚本。每次显示5行代码,再次执行L命令时(不再需要带方法名),从已显示的下一行开始显示。在命令行工具窗口输入如下命令:

第4步,设置断点。对于断点的行号设置必须遵守以下原则:①定义声明部分不能设置断点;②如果一条语句跨多行,则断点应设置在语句的最后一行;③如果多条语句在同一行,则在第一条语句执行前执行中断;④如果设置断点的行不能中断,则自动将其下移到第一个可以中断的行;⑤可以在调试过程中动态添加断点,如果在同一位置重复设置断点,则重复断点会被忽略。在存储过程“p_salarysum_bycityname”的第11行设置断点,在命令行工具窗口输入如下命令:

第5步,显示断点。显示的每个断点包含以下信息:①序号,这是一个自增值,从1开始,设置断点时自动为其分配;②方法名,如果为程序块,则方法名为空;③行号,在命令行工具窗口输入如下命令:

第6步,运行。如果设置了断点,则执行到断点指定的位置时中断,转入调试状态,并显示当前执行所在行的语句;否则,执行完成并显示结果。R返回结果结束执行之后,如果没有重新设置SQL语句,则再次运行的仍是之前设置的SQL语句,断点信息可以重用;如果重新设置了SQL语句,则断点信息会被清空。在命令行工具窗口输入如下命令:

第7步,显示city_rec.city_name变量值。在命令行工具窗口输入如下命令:

第8步,继续执行。在调试状态下,可以使用命令C继续SQL语句的执行,直到运行到断点或执行完成。在命令行工具窗口输入如下命令:

第9步,取消断点。断点序号可以通过INFO B命令获取,删除后断点的编号不会重用。取消断点命令可以在调试工具运行的任何时间调用。在命令行工具窗口输入如下命令:

第10步,结束执行。如果结束执行之后,必须重新设置SQL语句,且断点信息被清空,则在命令行工具窗口输入如下命令:

第11步,退出调试工具。如果不希望继续调试,可以输入命令QUIT。dmdbg将中断连接,退出执行。在命令行工具窗口输入如下命令:

[1]在安装达梦数据库系统时,用户可以选择“创建示例数据库DMHR”,系统将自动创建“DMHR”模式,该模式归属于“SYSDBA”用户,“SYSDBA”用户密码默认为“SYSDBA”。本书相关示例代码中未加模式名称“DMHR”,读者在测试本书相关示例时,需要先执行“SET SCHEMA DMHR”将模式设置为“DMHR”。