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

问题描述 投票:0回答:1

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

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

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

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

但是我没有设法分析行为,因为执行跟踪很差,因为整个块被认为是单个语句,所以它只返回包含在其中的所有语句的1个代码。

  • 有没有办法跟踪块内的每个执行语句?
  • 如果没有,您会如何建议继续调试我的脚本?

谢谢您的帮助,

sql debugging db2 block
1个回答
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将进度行追加到单独的专用日志表中。可以在主sproc运行时查看该表,并且可以具有时间戳等。当可以动态启用/禁用日志记录时,这非常有用。

© www.soinside.com 2019 - 2024. All rights reserved.