如何使用 DB2 调试 BEGIN-END SQL 块?

How to debug a BEGIN-END SQL block with DB2?

我有一个很大的 SQL 脚本,其中包含一个用于 DB2 数据库的 BEGIN DECLARE-END 块。

该块包含一个似乎无限大的 WHILE 循环,我需要弄清楚错误是什么:

--#SET TERMINATOR @
BEGIN
  DECLARE...
  //many insert/join/update
  WHILE(condition)
    //some looping join
  END WHILE;
END@

我的脚本全局看起来像那样。

但我无法分析行为,因为整个块被视为单个语句,因此很难跟踪执行,因此它只有 returns 1 个代码用于包含在中的所有语句。

感谢您的帮助,

通常代码检查(可能由不同的眼睛)被证明是最快的。

您可以使用 IBM Data Studio 进行调试(单步、断点等)(尽管您可能需要先将块封装在存储过程中)。

如果您的 Db2 服务器 运行 在 Linux/Unix/Windows 上,您还可以使用活动日志记录,换句话说,更改您的代码以在关键点添加调试行,然后让您的代码 运行 并查看输出。这是有限制的,因为在代码停止之前您可能看不到输出,具体取决于缓冲。但它可以提供帮助。要使用它,请在块开始之前将 set serveroutput on 添加到脚本中,然后在关键点添加 call DBMS_OUTPUT.PUT_LINE('....some debugging info...')。参见 PUT_LINE。另请参阅 DBMS_OUTPUT 包中的其他方法。

我还看到了记录到 table 的代码,即它不使用 dbms_output.put_line,而是调用一个自治存储过程将进度线附加到单独的专用日志记录 -table . table 可以在主存储过程 运行 时查看,并且可以有时间戳等。这在日志记录可以 enabled/disabled 动态时非常有用。