我花了很多时间尝试从存储过程中检索数据,这是代码
CREATE PROCEDURE aprocedure(
IN idin CHAR,
OUT returnvalue CHAR)
AS:
SET returnvalue=
(SELECT something
FROM sometable
WHERE id=idin)
我可以创建它,没有任何问题,但当我试图这样称呼时:
call someprocedure('theid', ?)
错误-313一直在弹出,我做了功课并检查了网页,IBM论坛根本没有帮助,我找不到任何文档,规范或任何使这个更清楚的东西,也是SQL错误代码-313意味着过程中的参数数量与调用时使用的参数数量不匹配。因此,经过太多的研究,我开始认为带有JDBC驱动程序和/或SQuirreL的DB2在返回OUT值时遇到了麻烦,(我还安装了一个DB2 CTL客户端,创建了一个本地数据库,创建了一个表,创建了一个程序,我打电话给,并且一切都很顺利)所以我将我的代码更改为此(使用结果集而不是OUT):
CREATE PROCEDURE someprocedure(IN idin CHAR (22))
DYNAMIC RESULT SETS 1
P1: BEGIN
DECLARE cursor1 CURSOR WITH RETURN FOR
SELECT something FROM sometable WHERE id=idin;
OPEN cursor1;
END P1
aaaaaaaaaaa和NOTHING,SQuirreL在尝试创建它时给了我一些错误代码,所以......我在Aqua Data Studio 4.7中输入相同的代码,并且像魅力一样工作,我从Aqua Data调用这样的程序:
call someprocedure('theid');
它返回了应该返回的内容,我用SQuirreL尝试了同样的句子...... 它也工作了!!
我确定我的sintaxys一直都是正确的,即使有OUT类型的返回,所以,我的问题,最后是这个。
SQuirreL在将输入传递给JDBC之前检查输入的输入吗? 也 我在哪里可以找到DB2究竟是如何改变SQL代码的?因为我们都知道所有的DBM都会改变SQL,但是MySQL有很好的文档...而且老实说我找不到任何关于DB2的好文章,我也在谈论“纯”SQL,因为在DB2中你可以在C中输入存储过程,Java等...