DB2 Windows版-存储过程-在多个点打印表值以进行调试

时间:2018-09-20 06:23:32

标签: db2 db2-luw

我是DB2的新手。我正在编写一个使用某些GLOBAL TEMPORARY TABLE的过程,插入并处理数据并返回它。但是对于调试,我需要知道每个步骤后的表是什么样(类似于MS SQL SERVER中的select)。有什么办法可以做到这一点。

例如: 在GLOBAL TEMPORARY TABLE“ ABC”中插入一些内容

DECLARE CR1 CURSOR WITH RETURN TO CLIENT FOR 
Select * from ABC FOR READ ONLY;

处理ABC表中的一些数据

DECLARE CR2 CURSOR WITH RETURN TO CLIENT FOR 
Select * from ABC FOR READ ONLY;

OPEN CR1 ;

OPEN CR2 ;

CR1和CR2都返回相同的值(操作后的值)

有没有一种方法可以打印表格,然后在那里调试表中的值。

2 个答案:

答案 0 :(得分:1)

您可以print information,但我建议使用routine debugger as provided by IBM Data Studio。在那里,您set breakpoints在要检查存储过程的行上。在执行过程中,您可以看到发生了什么。

答案 1 :(得分:1)

Conditional compilation in SQL

示例:

--#SET TERMINATOR @
SET CURRENT SQL_CCFLAGS = 'DEBUG:TRUE'@
--SET CURRENT SQL_CCFLAGS = ''@

CREATE OR REPLACE PROCEDURE TEST_DEBUG
BEGIN
  DECLARE V_ITER INT;

  DECLARE GLOBAL TEMPORARY TABLE SESSION.TEST (VALUE INT) WITH REPLACE ON COMMIT PRESERVE ROWS NOT LOGGED;
  _IF __DEBUG _THEN
    DECLARE GLOBAL TEMPORARY TABLE SESSION.DEBUG (ITER INT, VALUE INT) WITH REPLACE ON COMMIT PRESERVE ROWS NOT LOGGED;
  _END

  SET V_ITER=1; INSERT INTO SESSION.TEST VALUES 1,2,3;
  _IF __DEBUG _THEN
    INSERT INTO SESSION.DEBUG (ITER, VALUE) SELECT V_ITER, VALUE FROM SESSION.TEST;
  _END

  SET V_ITER=2; INSERT INTO SESSION.TEST VALUES 4,5,6;
  _IF __DEBUG _THEN
    INSERT INTO SESSION.DEBUG (ITER, VALUE) SELECT V_ITER, VALUE FROM SESSION.TEST;
  _END
END@

CALL TEST_DEBUG@
SELECT * FROM SESSION.TEST@
SELECT * FROM SESSION.DEBUG@

在测试SP时,请取消注释SET CURRENT SQL_CCFLAGS =''子句,然后重新创建SP。 在这种情况下,所有_IF ... _END块将从编译后的代码中删除。