Spring DB2存储过程没有返回结果集

Spring DB2存储过程没有返回结果集,spring,stored-procedures,jdbc,db2,Spring,Stored Procedures,Jdbc,Db2,我有一个DB2存储过程,它在数据库中插入一行。存储过程如下所示: CREATE PROCEDURE ZSPPQINSERTUSERIDBA ( IN P_USERID CHAR(10), IN P_BUSINESSAREA CHAR(10), IN P_SELECTEDIND CHAR(1), IN P_DEFAULTIND CHAR(1), IN

我有一个DB2存储过程,它在数据库中插入一行。存储过程如下所示:

CREATE PROCEDURE ZSPPQINSERTUSERIDBA ( 
        IN P_USERID             CHAR(10),
        IN P_BUSINESSAREA       CHAR(10),
        IN P_SELECTEDIND        CHAR(1),
        IN P_DEFAULTIND         CHAR(1),
        IN P_LEGACYSYSTEM       CHAR(10),
        IN P_LEGACYLOGIN        CHAR(16),
        IN P_LEGACYPASSWORD     CHAR(16),
        IN P_OTHERLOGIN         CHAR(10),
        IN P_OTHERPASSWORD      CHAR(10),
        IN P_ADDSECURLOGIN      CHAR(10),
        IN P_ADDSECURPASSWORD   CHAR(10),
        IN P_LASTUPDATEUSERID   CHAR(10),
        IN P_LASTUPDATE         TIMESTAMP)

    DYNAMIC RESULT SETS 1 
    LANGUAGE SQL 
    SPECIFIC ZSPPQINSERTUSERIDBA 
    NOT DETERMINISTIC 
    MODIFIES SQL DATA 
    CALLED ON NULL INPUT
    SET OPTION  ALWBLK = *ALLREAD ,
    ALWCPYDTA = *OPTIMIZE , 
    COMMIT = *CS , 
    CLOSQLCSR = *ENDMOD ,
    DECRESULT = (31, 31, 00) , 
    DFTRDBCOL = *NONE , 
    DYNDFTCOL = *NO , 
    DYNUSRPRF = *USER ,
    RDBCNNMTH = *RUW ,
    SRTSEQ = *HEX 

    P1 : BEGIN

    DECLARE TOTALCNT INTEGER DEFAULT 0 ; 

    DECLARE C1 CURSOR WITH RETURN FOR 
      SELECT Count (*) FROM USERBUSINESSAREA
       WHERE USERID            = P_USERID
         AND BUSINESSAREA = P_BUSINESSAREA;

    OPEN C1;
     FETCH C1 INTO TOTALCNT;
    CLOSE C1;

    IF ( TOTALCNT = 0) THEN 
      INSERT 
      INTO  USERBUSINESSAREA    
        (
            USERID,
            BUSINESSAREA,
            SELECTEDIND,
            DEFAULTIND,
            LEGACYSYSTEM,
            LEGACYLOGIN,
            LEGACYPASSWORD,
            OTHERLOGIN,
            OTHERPASSWORD,
            ADDSECURLOGIN,
            ADDSECURPASSWORD,
            LASTUPDATEUSERID,
            LASTUPDATE
        )
            VALUES  (P_USERID,
                     P_BUSINESSAREA,
                     P_SELECTEDIND,
                     P_DEFAULTIND,
                     P_LEGACYSYSTEM,
                     P_LEGACYLOGIN,
                     P_LEGACYPASSWORD,
                     P_OTHERLOGIN,
                     P_OTHERPASSWORD,
                     P_ADDSECURLOGIN,
                     P_ADDSECURPASSWORD,
                     P_LASTUPDATEUSERID,
                     P_LASTUPDATE);
      END IF;
    END P1;

当我尝试从Java/Spring集成层执行上述存储过程时,没有返回任何结果集。要使上述存储过程返回结果集,需要做哪些更改

您到底想要返回什么

有一个光标,您可以在其中选择元素的数量,并将其指定给变量。之后,光标关闭。 根据检索到的数量,您可以执行插入。 我不知道你期望什么:

是否要返回结果集?那么你应该有一个打开的光标。e、 g.从USERBUSINESSAREA中选择* 是否要在光标中返回检索到的值?然后,正如@mustaccio所说,您可以添加一个OUT参数,然后只分配值。
以下适用于我的修改后的存储过程刚刚使用RETURN for更改为RETURN to CALLER for:


结果集是一个打开的光标。当过程返回时,没有任何打开的游标。如果只需要返回一个值,则不需要结果集,而是使用OUT参数。是否只想知道是否在数据库中插入了行?我的意思是,相对于已经有一个。您在Java层中需要哪些实际信息?您正在尝试执行的更大的任务是什么?因为您的光标只需要有一行,并且您在过程中进行了提取,返回给调用者的结果集将位于末尾,换句话说,调用者将不再从中提取任何内容。@mustaccio yes..您是正确的。它不会包含任何内容。唯一的区别是结果集对象不会为null。我要求结果在Java端不为null。所以它解决了我的问题…这是一个评论,不是一个真正的答案。
CREATE PROCEDURE ZSPPQINSERTUSERIDBA ( 
        IN P_USERID             CHAR(10),
        IN P_BUSINESSAREA       CHAR(10),
        IN P_SELECTEDIND        CHAR(1),
        IN P_DEFAULTIND         CHAR(1),
        IN P_LEGACYSYSTEM       CHAR(10),
        IN P_LEGACYLOGIN        CHAR(16),
        IN P_LEGACYPASSWORD     CHAR(16),
        IN P_OTHERLOGIN         CHAR(10),
        IN P_OTHERPASSWORD      CHAR(10),
        IN P_ADDSECURLOGIN      CHAR(10),
        IN P_ADDSECURPASSWORD   CHAR(10),
        IN P_LASTUPDATEUSERID   CHAR(10),
        IN P_LASTUPDATE         TIMESTAMP)

    DYNAMIC RESULT SETS 1 
    LANGUAGE SQL 
    SPECIFIC ZSPPQINSERTUSERIDBA 
    NOT DETERMINISTIC 
    MODIFIES SQL DATA 
    CALLED ON NULL INPUT
    SET OPTION  ALWBLK = *ALLREAD ,
    ALWCPYDTA = *OPTIMIZE , 
    COMMIT = *CS , 
    CLOSQLCSR = *ENDMOD ,
    DECRESULT = (31, 31, 00) , 
    DFTRDBCOL = *NONE , 
    DYNDFTCOL = *NO , 
    DYNUSRPRF = *USER ,
    RDBCNNMTH = *RUW ,
    SRTSEQ = *HEX 

    P1 : BEGIN

    DECLARE TOTALCNT INTEGER DEFAULT 0 ; 

    DECLARE C1 CURSOR WITH RETURN TO CALLER FOR
      SELECT Count (*)  FROM USERBUSINESSAREA
       WHERE USERID            = P_USERID
         AND BUSINESSAREA = P_BUSINESSAREA;

    OPEN C1;

     FETCH C1 INTO TOTALCNT;


    IF ( TOTALCNT = 0) THEN 
      INSERT 
      INTO  USERBUSINESSAREA    
        (
            USERID,
            BUSINESSAREA,
            SELECTEDIND,
            DEFAULTIND,
            LEGACYSYSTEM,
            LEGACYLOGIN,
            LEGACYPASSWORD,
            OTHERLOGIN,
            OTHERPASSWORD,
            ADDSECURLOGIN,
            ADDSECURPASSWORD,
            LASTUPDATEUSERID,
            LASTUPDATE
        )
            VALUES  (P_USERID,
                     P_BUSINESSAREA,
                     P_SELECTEDIND,
                     P_DEFAULTIND,
                     P_LEGACYSYSTEM,
                     P_LEGACYLOGIN,
                     P_LEGACYPASSWORD,
                     P_OTHERLOGIN,
                     P_OTHERPASSWORD,
                     P_ADDSECURLOGIN,
                     P_ADDSECURPASSWORD,
                     P_LASTUPDATEUSERID,
                     P_LASTUPDATE);
      END IF;

    END P1;