首页 > 解决方案 > DB2 for windows - 存储过程 - 在多个点打印表值以进行调试

问题描述

我是 DB2 的新手。我正在编写一个程序来使用一些 GLOBAL TEMPORARY TABLE,插入和操作数据并返回它。但是为了调试,我需要知道每一步之后表的样子(类似于 MS SQL SERVER 中的选择)。有什么办法可以做到这一点。

例如:在 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 都返回相同的值(操作后的值)

有没有办法打印表格然后在那里调试其中的值。

标签: db2db2-luw

解决方案


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 块都将从编译的代码中删除。


推荐阅读