将SQirrel 3.2.1中的程序与DB2数据库的JDBC驱动程序一起使用时存储过程

时间:2012-05-18 22:11:00

标签: sql stored-procedures db2 squirrel-sql

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

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

0 个答案:

没有答案