如何使用SQuirreL SQL中的OUT参数调用DB2存储过程?

时间:2011-02-16 18:25:44

标签: stored-procedures db2 squirrel-sql

我真的很喜欢SQuirreL SQL作为SQL查询工具,但我从来没有能够在AS / 400 DB2数据库中调用存储过程。我总是得到错误“设置或注册的参数值的数量与参数的数量不匹配。”我已经仔细检查了参数的数量并没有运气。这是我尝试过一个IN和一个OUT的过程的语法:

致电SOMESPROC(12345,?);

7 个答案:

答案 0 :(得分:6)

似乎SQuirrel目前无法在AS / 400 DB2上执行此操作。

使用开源“SQL Workbench / J”(http://www.sql-workbench.net/)我能够调用一个过程:

wbcall SOMESPROC(12345, ?);

它有自己的命令来调用过程“wbcall”。使用 ?输出参数。

注意:安装SQL Workbench / J时,请确保从IBM下载正确的DB2驱动程序,并在SQL Workbench / J中添加驱动程序时添加许可文件。

答案 1 :(得分:3)

在松鼠你可以使用这样的东西。您需要确保声明的变量的类型与存储过程中out参数的类型相匹配。

BEGIN
    DECLARE outParam INT;
    STORED_PROC_NAME(outParam);
END

如果您还需要为该程序提供输入,则可以执行此操作。

BEGIN
    DECLARE outParam INT;
    STORED_PROC_NAME('input', outParam);
END

您还需要将语句分隔符更改为;以外的其他分隔符。否则它会破坏声明并尝试单独发送每个部分。

答案 2 :(得分:2)

在DbVisualizer的专业版中,使用SQL中的"流程参数标记"在启用SQL Commander菜单选项的情况下,它将允许"?" PARAM

call SOMESPROC(12345, ?);

答案 3 :(得分:0)

我认为如果有一个呼叫应该是:

CALL SomeSProc(12345)

获得结果可能会尝试:

SELECT * FROM SomeSProc(12345)

答案 4 :(得分:0)

这是一个测试示例,它适用于带有db2存储过程的Squirrel 3.7。诀窍是通过过渡存储过程MY_PROC_TEST来调用真实存储过程PROC_TEST。

在squirrel中更改语句分隔符>会话>会话属性> SQL:@

DROP PROCEDURE MY_PROC_TEST()@
CREATE PROCEDURE MY_PROC_TEST()
RESULT SETS 1 -- out resultset (call product)
LANGUAGE SQL
BEGIN
  DECLARE flag SMALLINT; -- out parameter
  CALL MY_PROC('2015', flag);
END @
CALL MY_PROC_TEST()@
END @

然后你可以像这样调用sored过程:

致电MY_PROC_TEST()@

答案 5 :(得分:0)

如果您更改分隔符(如上所述),这将在Squirrel中有效。但是,要查看变量是什么,您需要执行以下操作...

在我的例子中,我将分隔符设置为tildy(〜)。最后一次"结束",之前"选择"。代码从这里开始......

begin
declare inoutParm numeric(2,0);
call spMyStoredProcedure(
             1234567                                     
           , inoutParm                                           
       );
declare global temporary table session.myTempTbl  
       (MyResult   char(1024) )                                         
with replace ;
insert into session.myTempTbl
  (myResult)
   values(inoutParm) ;  
end
~
select myResult from session.myTempTbl
麦克基利 as400(db2)SQL Developer

答案 6 :(得分:-2)

在squirrel中更改语句分隔符>会话>会话属性> SQL:'#'

BEGIN
    DECLARE inOutParam varchar(200);
    set inOutParam =  'a value';
    STORED_PROC_NAME(outParam);
END;
#