db2 - 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 都返回相同的值(操作后的值)
有没有办法打印表格然后在那里调试其中的值。
解决方案
例子:
--#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 块都将从编译的代码中删除。
推荐阅读
- c# - Unity C#:第三人称相机控制器:向相机方向旋转时捕捉
- azure-devops - Azure 自托管 Windows 代理挂钩
- mysql - 错误 1364 (HY000):字段“名称”没有默认值
- c# - EF Core 自动迁移流程
- python - 如何为同一个包添加多个依赖 URL 到 setuptools?
- bash - 将 github 字节粗略近似为 loc
- javascript - Google Chrome 扩展程序:有时 event.js 中的 chrome.runtime.onMessage.addListener 不会触发
- python - Google Translate API python 每次都不工作,有时我得到输出,有时我没有?
- angular - 是否打算在 Angular 中评估投影内容,即使它没有呈现给 DOM?
- c++ - 如何创建一个采用 xexpression 或容器的函数?