我是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都返回相同的值(操作后的值)
有没有一种方法可以打印表格,然后在那里调试表中的值。
答案 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块将从编译后的代码中删除。