我真的很喜欢SQuirreL SQL作为SQL查询工具,但是我从来没有能够让它调用我们AS/400 DB2数据库中的存储过程。我总是得到错误“设置或注册的参数值的数目与参数的数目不匹配”。我已经仔细检查了参数的数目,但是没有成功。下面是我尝试过的一个过程的语法,它接受一个IN和一个OUT:调用SOMESPROC(12345,?);
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中添加驱动程序时添加许可证文件。
jk9hmnmh2#
在Squirrel中,你可以这样使用:你需要确保声明变量的类型与存储过程中out参数的类型相匹配。
BEGIN DECLARE outParam INT; STORED_PROC_NAME(outParam); END
如果您还需要为该过程提供输入,则可以这样做。
BEGIN DECLARE outParam INT; STORED_PROC_NAME('input', outParam); END
您还需要将语句分隔符更改为;以外的内容。否则,它将分解语句,并尝试单独发送每一段。
;
js81xvg63#
在专业版DbVisualizer中,启用SQL Commander菜单选项下的“SQL中的过程参数标记”时,将允许“?”参数
call SOMESPROC(12345, ?);
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
vcudknz35#
我认为,如果有一个在,那么调用应该是:
CALL SomeSProc(12345)
要得到结果,可以尝试:
SELECT * FROM SomeSProc(12345)
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过程:调用我的程序测试()@
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开发人员
2sbarzqh8#
在松鼠〉会话〉会话属性〉SQL中更改语句分隔符:'#'
BEGIN DECLARE inOutParam varchar(200); set inOutParam = 'a value'; STORED_PROC_NAME(outParam); END; #
8条答案
按热度按时间fcy6dtqo1#
SQuirrel目前似乎不能在AS/400 DB2上执行此操作。
使用开放源代码“SQL Workbench/J”(http://www.sql-workbench.net/),我能够调用一个过程:
它有自己的命令来调用过程“wbcall”。使用?作为out参数。
注意:在安装SQL Workbench/J时,请确保从IBM下载正确的DB2驱动程序,并在SQL Workbench/J中添加驱动程序时添加许可证文件。
jk9hmnmh2#
在Squirrel中,你可以这样使用:你需要确保声明变量的类型与存储过程中out参数的类型相匹配。
如果您还需要为该过程提供输入,则可以这样做。
您还需要将语句分隔符更改为
;
以外的内容。否则,它将分解语句,并尝试单独发送每一段。js81xvg63#
在专业版DbVisualizer中,启用SQL Commander菜单选项下的“SQL中的过程参数标记”时,将允许“?”参数
tnkciper4#
通过反复试验,我看到了松鼠的结果。
vcudknz35#
我认为,如果有一个在,那么调用应该是:
要得到结果,可以尝试:
pbgvytdp6#
下面是一个在Squirrel3.7上运行的db2存储过程的测试示例。技巧是传递一个过渡存储过程MY_PROC_TEST来调用真实的的存储过程PROC_TEST。
在松鼠〉会话〉会话属性〉SQL中更改语句分隔符:@
然后,您可以像这样调用sored过程:
调用我的程序测试()@
ctehm74n7#
如果你改变了分隔符(如上所述),这将在Squirrel中起作用。但是,要查看变量是什么,你需要执行以下操作...
在我的示例中,我将把分隔符设置为tildy(~)。包含在最后一个“end”之后,“select”之前。代码从这里开始...
Mic Keeley as 400( db2 )SQL开发人员
2sbarzqh8#
在松鼠〉会话〉会话属性〉SQL中更改语句分隔符:'#'