这看起来应该很容易......无论如何,它在MS SQL Server中
在DB2存储过程中,如何获取变量的值?假设我有以下存储过程:
CREATE PROCEDURE etl.TestABC(
)
LANGUAGE SQL
BEGIN
declare Stmt varchar(2048);
set Stmt = 'this is a test';
-- print Stmt;
-- select Stmt;
return 0;
END @
我想在设置后打印出Stmt的值。打印不起作用,选择不起作用。有人说我必须先将它插入表中,然后在运行存储过程后获取它。这真的有必要吗?
谢谢, 西尔维亚
编辑:我应该更清楚一点,我想在设置之后每次都看到Stmt的值,我可能需要在同一个存储过程中多次设置它。答案 0 :(得分:6)
如果要在开发/测试存储过程时查看值,则应使用IBM Data Studio并调试存储过程。这提供了正常的调试器功能,因此您可以在过程执行时看到变量的值。
但是,如果您只想执行存储过程并查看值的历史记录,我建议创建一个全局临时表,并在代码中插入一行:
declare global temporary table StmtHistory (
when timestamp not null with default current timestamp,
stmt varchar(2048) not null
) on commit preserve rows;
然后,在存储过程中的点处,添加:
insert into session.StmtHistory (stmt) values (stmt);
执行存储过程后,您可以查询表session.StmtHistory
并查看您要查找的值。
此外,DB2 9.7增加了Oracle兼容性,因此如果您使用此版本,您实际上可以使用DBMS_OUTPUT.PUT_LINE和DBMS_OUTPUT.GET_LINES来实现此目的,如果您愿意的话。
答案 1 :(得分:3)
您必须在过程的构造函数中声明变量:
CREATE PROCEDURE etl.TestABC(
OUT Stmt varchar(2048)
)
LANGUAGE SQL
BEGIN
-- declare Stmt varchar(2048);
set Stmt = 'this is a test';
-- print Stmt;
-- select Stmt;
return 0;
END @
这将允许您从控制台访问它:
call etl.TestABC(?)
输出与此类似:
Value of output parameters
Parameter Name : STMT
Parameter Value : this is a test
Return Status = 0
注意:目前我无法访问我们的DB2服务器,但我相信上面应该可以解决问题。示例基于: http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.apdv.sql.doc/doc/t0007055.htm
答案 2 :(得分:1)
请尝试以下行:
values Stmt;
答案 3 :(得分:1)
您可以使用“log4db2”之类的日志记录系统,它允许您在表或文件中编写消息。消息由可以处于活动状态或非活动状态的记录器控制。
使用log4db2,您无需删除可能在将来使用的调试消息。您只需停用关联记录器或降低日志记录级别,就像使用'log4j'
一样 检查该实用程序