如何从SQuirreL SQL调用带有OUT参数的DB2存储过程?

omqzjyyz  于 2022-11-07  发布在  DB2
关注(0)|答案(8)|浏览(217)

我真的很喜欢SQuirreL SQL作为SQL查询工具,但是我从来没有能够让它调用我们AS/400 DB2数据库中的存储过程。我总是得到错误“设置或注册的参数值的数目与参数的数目不匹配”。我已经仔细检查了参数的数目,但是没有成功。下面是我尝试过的一个过程的语法,它接受一个IN和一个OUT:
调用SOMESPROC(12345,?);

fcy6dtqo

fcy6dtqo1#

SQuirrel目前似乎不能在AS/400 DB2上执行此操作。
使用开放源代码“SQL Workbench/J”(http://www.sql-workbench.net/),我能够调用一个过程:

wbcall SOMESPROC(12345, ?);

它有自己的命令来调用过程“wbcall”。使用?作为out参数。
注意:在安装SQL Workbench/J时,请确保从IBM下载正确的DB2驱动程序,并在SQL Workbench/J中添加驱动程序时添加许可证文件。

jk9hmnmh

jk9hmnmh2#

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

BEGIN
    DECLARE outParam INT;
    STORED_PROC_NAME(outParam);
END

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

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

您还需要将语句分隔符更改为;以外的内容。否则,它将分解语句,并尝试单独发送每一段。

js81xvg6

js81xvg63#

在专业版DbVisualizer中,启用SQL Commander菜单选项下的“SQL中的过程参数标记”时,将允许“?”参数

call SOMESPROC(12345, ?);
tnkciper

tnkciper4#

通过反复试验,我看到了松鼠的结果。

create or replace variable var4 char(1);
create or replace variable var5 decimal(3,0);
create or replace variable var6 char(60);
call getthedata('XXX',123456789,'1234567',var4,var5,var6);
select var4,var5,var6 from sysibm.sysdummy1;  -- displays OUT parms
vcudknz3

vcudknz35#

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

CALL SomeSProc(12345)

要得到结果,可以尝试:

SELECT * FROM SomeSProc(12345)
pbgvytdp

pbgvytdp6#

下面是一个在Squirrel3.7上运行的db2存储过程的测试示例。技巧是传递一个过渡存储过程MY_PROC_TEST来调用真实的的存储过程PROC_TEST。
在松鼠〉会话〉会话属性〉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过程:
调用我的程序测试()@

ctehm74n

ctehm74n7#

如果你改变了分隔符(如上所述),这将在Squirrel中起作用。但是,要查看变量是什么,你需要执行以下操作...
在我的示例中,我将把分隔符设置为tildy(~)。包含在最后一个“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

Mic Keeley as 400( db2 )SQL开发人员

2sbarzqh

2sbarzqh8#

在松鼠〉会话〉会话属性〉SQL中更改语句分隔符:'#'

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

# 

相关问题