DMSQL程序调试

达梦数据库中,调试DMSQL程序可以通过manager图形化工具完成。如果系统中没有安装图形化工具时,也可以利用命令行工具dmdbg 调试DMSQL 程序,dmdbg 执行程序位于安装目录的“bin”子目录。

一、dmdbg 简介

dmdbg 在整个运行过程中可以处于初始状态(S)、待执行(W)、执行®、调试(D)、 执行结束(O)等不同的状态:
初始状态(S):工具启动完成后,尚未设置调试语句;
待执行状态(W):设置调试语句后,等待用户执行;
执行状态®:开始执行后,未中断而运行的过程;
调试状态(D):执行到断点或强制中断后进入交互模式;
执行结束(O):执行完当前设置的调试语句,并返回结果。
dmdbg 在不同的状态下可以执行不同的操作,如下表所示,其中备注表示不同的命令分别在哪几种状态下可以使用。
在这里插入图片描述
在这里插入图片描述

二、dmdbg使用

1.登录
在操作系统的命令行窗口中使用命令行方式登录dmdbg,格式如下:
DMDBG <用户名>/<口令>[@<服务器名|IP>[:<端口号>]] 例如: DMDBG SYSDBA/SYSDBA@LOCALHOST:5236
在这里插入图片描述
建立下面的示例过程进行调试:

CREATE OR REPLACE PROCEDURE p1 AS 
DECLARE 
    my_ename  CHAR(10); 
    my_empno  NUMERIC(4); 
    my_sal     NUMERIC(7,2); 
    c1 CURSOR;
BEGIN 
    OPEN C1 FOR SELECT * FROM OTHER.EMPSALARY; 
    LOOP FETCH c1 INTO my_ename, my_empno, my_sal; 
        EXIT WHEN c1%NOTFOUND;   
    PRINT '姓名'||my_ename || '工号' || my_empno || '  薪水' || my_sal; 
    END LOOP; 
    CLOSE c1; 
END; 
/ 
SQL> call p1;
姓名KING      工号7839  薪水5000.00
姓名SCOTT     工号7788  薪水3000.00
姓名FORD      工号7902  薪水3000.00
姓名JONES     工号7566  薪水2975.00
姓名BLAKE     工号7698  薪水2850.00
姓名CLARK     工号7782  薪水2450.00
姓名ALLEN     工号7499  薪水1600.00
姓名TURNER    工号7844  薪水1500.00
姓名MILLER    工号7934  薪水1300.00
姓名WARD      工号7521  薪水1250.00
姓名MARTIN    工号7654  薪水1250.00
姓名ADAMS     工号7876  薪水1100.00
姓名JAMES     工号7900  薪水950.00
姓名SMITH     工号7369  薪水800.00
DMSQL 过程已成功完成
已用时间: 57.650(毫秒). 执行号:934.

2.设置语句
命令SQL 供用户设置需要执行的SQL 语句,其命令格式如下: SQL <SQL 语句> [’/’]
SQL 语句是非DDL 语句或语句块。如果SQL 是单条语句,则以分号“;”结尾;如果是语句块,则语句块后必须以单独一行的斜杠符“/”结束。在调试中行数从SQL 语句实际 起始行开始计数。 在实际执行前,可以多次调用SQL 命令设置待调试的语句,而dmdbg 只是记录最后一次设置的语句。
如果需要调试自定义的存储函数,需要和过程调用方式一样,使用call调用。
按前面介绍的方法登录dmdbg,使用SQL 命令设置调试语句,如下: DBG>SQL CALL p1;
在这里插入图片描述
3. 设置断点
使用命令B设置调试断点,可以为指定的语句块设置执行中断位置。调试执行到断点设置位置后,将自动中断当前执行。
设置断点命令有两种不同格式:
B <方法名> 或 B [<方法名>:]<行号>
如果省略方法名,则为当前方法或语句块设置行号断点。包中的方法可以设置断点,但不能指定行号;如果断点设置在包上,则可以指定行号,但可以设置断点部分只能是该包体 的初始化代码。
行号从1开始计数。对于方法来说,其开始的定义声明部分语句也包含在行号计数中。

设置断点示例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 显示断点

显示断点命令为: INFO B
该命令显示所有已设置的断点。显示的每个断点包含以下信息:
序号:这是一个自增值,从1 开始,设置断点时自动为其分配;
方法名:如果为语句块,则方法名为空;
直接输入号。
在这里插入图片描述
5. 取消断点
使用命令D 取消断点,格式为:
D <断点序号> 断点序号可以通过INFO B 命令获取,删除后断点的编号不会重用。取消断点命令可 以在工具运行的任何时间调用。
在这里插入图片描述
6. 执行语句
执行语句命令格式为:
R
命令R执行设置的 SQL 语句。此命令无参数,执行R命令前必须已经设置过调试语句,且调试过程中命令R不允许重复使用。
如果设置了断点,则执行到断点指定的位置时中断,转入调试状态,并显示当前执行所在行的语句;否则,执行完成并显示结果。
在这里插入图片描述
7. 显示脚本
使用命令L可以在dmdbg工具中显示指定方法的脚本。命令格式如下: L <方法名>
方法名可以包含模式、包等前缀。在调试状态下,可以省略方法名,则显示当前正在运 行的方法。此命令可以帮助用户准确设置断点位置。
L命令每次显示5行代码,再次执行L 命令时(不再需要带方法名),从已显示的下 一行开始显示。
在这里插入图片描述
8. 中断执行
中断执行命令为: CTRL+C
在正常执行过程中,当监听到用户输入CTRL+C,则dmdbg 强制中断当前执行,转入调试状态。该命令对于调试死循环错误非常有效。
9. 继续执行
继续执行命令为:
C
在调试状态下,可以使用命令C 继续SQL 语句的执行,直到运行到断点或执行完成。

在这里插入图片描述
10. 执行进入
执行进入命令为:
S
如果当前中断语句包含方法调用,则执行进入命令S 可以将方法调用展开,执行到其语句块的第一条语句中断。如果当前行没有方法调用,则命令S 与单步执行命令N 等效。
在这里插入图片描述
11. 单步执行
单步执行命令为:
N
在调试状态下,单步执行命令N 可以执行到当前层次下一个可中断的行。如果当前行 包含多条语句,则所有该行语句都被执行。

在这里插入图片描述
12. 执行跳出
执行跳出命令为:
F 或 FINISH
该命令可以执行当前函数的余下操作,如果剩余行有断点则执行到断点中断,否则返回到上层调用后中断。如果当前已经是最上层,则与单步执行命令N 等效。
在这里插入图片描述
13. 打印变量
打印变量命令的格式为:
P <变量名>
命令P可以打印指定的变量值。SQL类型中,除了大字段数据,其它类型都可以打印。
在这里插入图片描述
14. 显示堆栈
显示堆栈命令为:
BT
命令BT 可以显示当前执行的堆栈状态。首先显示当前方法执行到的行数,然后从下至上显示各层方法名称及行号和调用参数值,输出参数不打印。
在这里插入图片描述
15. 下移栈帧
下移栈帧命令为:
DOWN
命令DOWN可以将当前调试栈帧下移一层。下移后,显示当前层执行到的语句行数。如果当前已经是堆栈最下层,则此命令无效。
16. 上移栈帧
上移栈帧命令为:
UP
命令UP 可以将当前调试栈帧上移一层。上移后,显示当前层执行到的语句行数。如果当前已经是堆栈最上层,则此命令无效。
在这里插入图片描述
17. 结束执行
结束执行命令为:KILL
在调试过程中,用户可以使用命令KILL结束当前正在调试的SQL 语句,并重新设置待调试的SQL语句。
18. 退出工具
退出dmdbg工具的命令为:
QUIT
如果不希望继续调试,可以输入命令QUIT。DMDBG 工具将中断连接,退出执行。
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值