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

时间:2018-09-05 10:18:17

标签: sql debugging db2 block

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

该块包含一个似乎无限的WHILE循环,我需要找出错误所在:

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

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

但是我无法分析这种行为,因为由于整个块被视为单个语句,因此执行跟踪很差,因此它所包含的所有语句仅返回1个代码。

  • 有什么方法可以跟踪块中每个已执行的语句?
  • 如果没有,您将如何建议继续调试我的脚本?

谢谢您的帮助,

1 个答案:

答案 0 :(得分:2)

通常,代码检查(可能是另一双眼睛)证明是最快的。

您可以使用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来将进度行追加到单独的专用记录表中。该表可以在主存储过程运行时查看,并且可以带有时间戳等。当可以即时启用/禁用日志记录时,这非常有用。