1

我花了很多时间试图从存储过程中检索数据,这是代码

            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等...

4

0 回答 0