6

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

调用 SOMESPROC(12345, ?);

4

7 回答 7

7

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

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

wbcall SOMESPROC(12345, ?);

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

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

于 2016-08-17T12:47:18.600 回答
3

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

BEGIN
    DECLARE outParam INT;
    STORED_PROC_NAME(outParam);
END

如果您还需要为程序提供输入,您可以这样做。

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

您还需要将语句分隔符更改为;. 否则它将破坏声明并尝试单独发送每件。

于 2012-07-17T19:12:59.630 回答
2

在 DbVisualizer 的专业版中,启用 SQL Commander 菜单选项下的“Process Parameter Markers in SQL”,它将允许“?” 参数

call SOMESPROC(12345, ?);
于 2014-11-22T19:56:57.030 回答
0

我认为如果有一个,那么调用应该是:

CALL SomeSProc(12345)

得到一个结果也许尝试:

SELECT * FROM SomeSProc(12345)
于 2011-02-18T15:04:13.940 回答
0

这是一个在 Squirrel 3.7 上使用 db2 存储过程的测试示例。诀窍是通过过渡存储过程 MY_PROC_TEST 调用真正的存储过程 PROC_TEST。

在 squirrel > session > session properties > 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()@

于 2016-03-15T09:05:33.567 回答
0

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

在我的示例中,我将分隔符设置为波浪线 (~)。包括在最后一个“end”之后,“select”之前。代码从这里开始......

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

于 2016-09-13T21:51:06.087 回答
-2

在 squirrel > session > session properties > SQL 中更改语句分隔符:'#'

BEGIN
    DECLARE inOutParam varchar(200);
    set inOutParam =  'a value';
    STORED_PROC_NAME(outParam);
END;
#
于 2014-07-02T14:08:12.050 回答