sql - 如何使用 DB2 调试 BEGIN-END SQL 块?
问题描述
我有一个包含BEGIN DECLARE-END
DB2 数据库块的大型 SQL 脚本。
该块包含一个似乎无限的大 WHILE 循环,我需要弄清楚错误是什么:
--#SET TERMINATOR @
BEGIN
DECLARE...
//many insert/join/update
WHILE(condition)
//some looping join
END WHILE;
END@
我的脚本全局看起来像这样。
但我没有设法分析行为,因为执行跟踪很差,因为整个块被视为单个语句,因此它只为其中包含的所有语句返回 1 个代码。
- 有什么方法可以跟踪块中每个执行的语句?
- 如果没有,您建议如何继续调试我的脚本?
感谢您的帮助,
解决方案
通常代码检查(可能通过不同的眼睛)证明是最快的。
您可以使用 IBM Data Studio 进行调试(单步、断点等)(尽管您可能需要先将块封装在存储过程中)。
如果您的 Db2 服务器在 Linux/Unix/Windows 上运行,您还可以使用活动日志记录,换句话说,更改您的代码以在关键点添加调试行,然后让您的代码运行并查看输出。这是限制性的,因为在代码停止之前您可能无法看到输出,具体取决于缓冲。但它可以提供帮助。要使用它,set serveroutput on
请在块开始之前添加到您的脚本中,然后call DBMS_OUTPUT.PUT_LINE('....some debugging info...')
在关键点添加。请参阅PUT_LINE。另请参阅 DBMS_OUTPUT 包中的其他方法。
我还看到了记录到表的代码,即它不是使用 dbms_output.put_line,而是调用一个自主存储过程来将进度行附加到一个单独的专用记录表。可以在主 sproc 运行时查看该表,并且可以具有时间戳等。当可以动态启用/禁用日志记录时,这非常有用。
推荐阅读
- java - 当使用条件格式时,Apache POI 为 cell.getCellStyle().getFillForegroundColorColor() 返回 null
- javascript - 在 render() 之前加载图像
- algorithm - 他们是如何找到以下代码的下界的?
- php - 通过 imap_search() 获取新邮件
- jquery - 在 Woocommerce 中悬停时翻转产品图像
- python - Python SDF 阅读器失败
- javascript - 将 cryto.generateKeyPair 与 jsonwebtoken 一起使用
- c# - 在没有视图的情况下执行 Web 控制器操作 [c#]
- python - 无法为 fasttext 加载输入数据
- ios - 为什么这是一个保留周期?