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