如何从DB2中的存储过程中获取变量值?

Syl*_*via 2 db2

这似乎应该很容易......无论如何,它在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 @ 
Run Code Online (Sandbox Code Playgroud)

我想在设置之后打印出Stmt的值.打印不起作用,选择不起作用.有人说我必须先将它插入表中,然后在运行存储过程后获取它.这真的有必要吗?

谢谢,西尔维亚

编辑:我应该更清楚,我想在每次设置后看到Stmt的值,我可能需要在同一个存储过程中多次设置它.

Ian*_*vde 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;
Run Code Online (Sandbox Code Playgroud)

然后,在存储过程中的点处,添加:

insert into session.StmtHistory (stmt) values (stmt);
Run Code Online (Sandbox Code Playgroud)

执行存储过程后,您可以查询表session.StmtHistory并查看要查找的值.

此外,DB2 9.7增加了Oracle兼容性,因此如果您使用此版本,您实际上可以使用DBMS_OUTPUT.PUT_LINE和DBMS_OUTPUT.GET_LINES来实现此目的,如果您愿意的话.