我花了很多时间试图从存储过程中检索数据,这是代码
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 什么都没有,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等...