Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring integration 存储过程出站网关未返回DB2数据库的任何结果集_Spring Integration - Fatal编程技术网

Spring integration 存储过程出站网关未返回DB2数据库的任何结果集

Spring integration 存储过程出站网关未返回DB2数据库的任何结果集,spring-integration,Spring Integration,我们使用的是DB2数据库。我用以下方式配置了存储过程出站网关: <int-jdbc:stored-proc-outbound-gateway auto-startup="true" data-source="routingDataSource" stored-procedure-name="ZSPPQCIMGL" skip-undeclared-results="true"

我们使用的是DB2数据库。我用以下方式配置了
存储过程出站网关

<int-jdbc:stored-proc-outbound-gateway
            auto-startup="true"
            data-source="routingDataSource" 
            stored-procedure-name="ZSPPQCIMGL"
            skip-undeclared-results="true"
            ignore-column-meta-data="true"  
            use-payload-as-parameter-source = "false" 
            expect-single-result="true" >

                  <int-jdbc:sql-parameter-definition name="P_CLMN" direction="IN" type="VARCHAR" />
                  <int-jdbc:sql-parameter-definition name="P_ALTC1" direction="IN" type="VARCHAR" />
                  <int-jdbc:sql-parameter-definition name="P_ALTC2" direction="IN" type="VARCHAR" />
                  <int-jdbc:sql-parameter-definition name="P_ALTC3" direction="IN" type="VARCHAR" />
                  <int-jdbc:sql-parameter-definition name="P_ALTC4" direction="IN" type="VARCHAR" />
                  <int-jdbc:sql-parameter-definition name="P_STRCRDATTIM" direction="IN" type="VARCHAR" />
                  <int-jdbc:sql-parameter-definition name="P_PAGESIZE" direction="IN" type="VARCHAR" />


                              <int-jdbc:parameter name="P_CLMN" expression="#xpath(payload, '//ClaimListResults/checkClaimSources/claimsCopy[1]/ClmNum')" />
                              <int-jdbc:parameter name="P_ALTC1" expression="#xpath(payload, '//ClaimListResults/checkClaimSources/claimsCopy[1]/AltClaim')" />
                              <int-jdbc:parameter name="P_ALTC2" expression="#xpath(payload, '//ClaimListResults/checkClaimSources/claimsCopy[1]/AltClaim')" />
                              <int-jdbc:parameter name="P_ALTC3" expression="#xpath(payload, '//ClaimListResults/checkClaimSources/claimsCopy[1]/AltClaim')" />
                              <int-jdbc:parameter name="P_ALTC4" expression="#xpath(payload, '//ClaimListResults/checkClaimSources/claimsCopy[1]/AltClaim')" />
                  <int-jdbc:parameter name="P_STRCRDATTIM" expression="#xpath(headers.originalRequest, '//lastCRDATTIM')" />
                              <int-jdbc:parameter name="P_PAGESIZE" expression="#xpath(headers.originalRequest, '//pageSize')" />

      <int-jdbc:returning-resultset name="rowMapper" row-mapper="com.dsths.cs.awd.utils.ResultSetRowMapper"/>

</int-jdbc:stored-proc-outbound-gateway>
这里会有什么问题

CallableStatement
代码如下:

CREATE PROCEDURE ZSPPQCIMGL ( 
                                IN P_CLMN    CHAR(75),
                IN P_ALTC1   CHAR(75),
                IN P_ALTC2   CHAR(75),
                IN P_ALTC3   CHAR(75),
                IN P_ALTC4   CHAR(75),
                                IN P_STRCRDATTIM TIMESTAMP,
                                IN P_PAGESIZE  CHAR(10)
)


        RESULT SETS 1
    LANGUAGE SQL
    SET OPTION COMMIT=*CS, DFTRDBCOL=*NONE, DYNDFTCOL=*NO


P1 : BEGIN

DECLARE C1 CURSOR WITH RETURN FOR 

SELECT 

BE2.CRDATTIM AS CRDATETIME, CONCAT(CHAR(BE2.CRDATTIM), CONCAT(BE2.RECORDCD, BE2.CRNODE))  AS  AwdObjectID,  CONCAT(CHAR(W67.PCRDATTIM), CONCAT(W67.PRECORDCD, W67.PCRNODE))  AS AWDTransId, W0.UNITCD AS BusinesArea, W0.OBJTYPE AS SourceType, W0.OBJECTID AS PhisyscalFileRef, CRUSERID as CreatedUserID,BE.CLMN AS ClaimNumber, W03.UNITCD as TransBusinessArea,W03.WRKTYPE as TransWorkType,W03.STATCD as TransStatus,W03.QUEUECD as TransQueue

FROM BESCAN BE JOIN W67U999S W67 ON 
                                                      W67.PCRDATTIM = BE.CRDATTIM
                                                AND   W67.PRECORDCD = BE.RECORDCD
                                                AND   W67.PCRNODE = BE.CRNODE
                                                AND       BE.RECORDCD = 'T'
                        JOIN W03U999S W03 ON 
                                                      BE.CRDATTIM = W03.CRDATTIM
                                                AND   BE.RECORDCD = W03.RECORDCD
                                                AND   BE.CRNODE = W03.CRNODE
                                                AND       BE.RECORDCD = 'T'
                                                JOIN  W00U999S W0 ON
                                                      W0.CRDATTIM = W67.CCRDATTIM
                                                AND   W0.RECORDCD = W67.CRECORDCD 
                                                AND   W0.CRNODE = W67.CCRNODE
                                                JOIN  BESCAN BE2 ON
                                                      W0.CRDATTIM = BE2.CRDATTIM
                                                AND   W0.RECORDCD = BE2.RECORDCD
                                                AND   W0.CRNODE = BE2.CRNODE
                                                AND       BE2.RECORDCD = 'O'
                        WHERE (BE.CLMN  IN (P_CLMN,P_ALTC1,P_ALTC2,P_ALTC3,P_ALTC4 ))
                                                                                                AND BE2.CRDATTIM < P_STRCRDATTIM
UNION                       


SELECT BE2.CRDATTIM AS CRDATETIME, CONCAT(CHAR(BE2.CRDATTIM), CONCAT(BE2.RECORDCD, BE2.CRNODE))  AS  AwdObjectID,  CONCAT(CHAR(W67.PCRDATTIM), CONCAT(W67.PRECORDCD, W67.PCRNODE))  AS AWDTransId, W0.UNITCD AS BusinesArea, W0.OBJTYPE AS SourceType, W0.OBJECTID AS PhisyscalFileRef, CRUSERID as CreatedUserID 
,BE.CLMN AS ClaimNumber, W03.UNITCD as TransBusinessArea,W03.WRKTYPE as TransWorkType,W03.STATCD as TransStatus,W03.QUEUECD as TransQueue
FROM BEAG BE JOIN W67U999S W67 ON 
                                                      W67.PCRDATTIM = BE.CRDATTIM
                                                AND   W67.PRECORDCD = BE.RECORDCD
                                                AND   W67.PCRNODE = BE.CRNODE
                                                AND       BE.RECORDCD = 'T'
                         JOIN W03U999S W03 ON 
                                                      BE.CRDATTIM = W03.CRDATTIM
                                                AND   BE.RECORDCD = W03.RECORDCD
                                                AND   BE.CRNODE = W03.CRNODE
                                                AND       BE.RECORDCD = 'T'
                                                JOIN  W00U999S W0 ON
                                                      W0.CRDATTIM = W67.CCRDATTIM
                                                AND   W0.RECORDCD = W67.CRECORDCD 
                                                AND   W0.CRNODE = W67.CCRNODE
                                                JOIN  BEAG BE2 ON
                                                      W0.CRDATTIM = BE2.CRDATTIM
                                                AND   W0.RECORDCD = BE2.RECORDCD
                                                AND   W0.CRNODE = BE2.CRNODE
                                                AND       BE2.RECORDCD = 'O'
                        WHERE (BE.CLMN  IN (P_CLMN,P_ALTC1,P_ALTC2,P_ALTC3,P_ALTC4 ))
                                                                                                AND BE2.CRDATTIM < P_STRCRDATTIM
  UNION                      

SELECT BE2.CRDATTIM AS CRDATETIME, CONCAT(CHAR(BE2.CRDATTIM), CONCAT(BE2.RECORDCD, BE2.CRNODE))  AS  AwdObjectID,  CONCAT(CHAR(W67.PCRDATTIM), CONCAT(W67.PRECORDCD, W67.PCRNODE))  AS AWDTransId, W0.UNITCD AS BusinesArea, W0.OBJTYPE AS SourceType, W0.OBJECTID AS PhisyscalFileRef, CRUSERID as CreatedUserID 
 ,BE.CLMN AS ClaimNumber, W03.UNITCD as TransBusinessArea,W03.WRKTYPE as TransWorkType,W03.STATCD as TransStatus,W03.QUEUECD as TransQueue
FROM BECLAIM BE JOIN W67U999S W67 ON 
                                                      W67.PCRDATTIM = BE.CRDATTIM
                                                AND   W67.PRECORDCD = BE.RECORDCD
                                                AND   W67.PCRNODE = BE.CRNODE
                                                AND       BE.RECORDCD = 'T'
                        JOIN W03U999S W03 ON 
                                                      BE.CRDATTIM = W03.CRDATTIM
                                                AND   BE.RECORDCD = W03.RECORDCD
                                                AND   BE.CRNODE = W03.CRNODE
                                                AND       BE.RECORDCD = 'T'
                                                JOIN  W00U999S W0 ON
                                                      W0.CRDATTIM = W67.CCRDATTIM
                                                AND   W0.RECORDCD = W67.CRECORDCD 
                                                AND   W0.CRNODE = W67.CCRNODE
                                                JOIN  BECLAIM BE2 ON
                                                      W0.CRDATTIM = BE2.CRDATTIM
                                                AND   W0.RECORDCD = BE2.RECORDCD
                                                AND   W0.CRNODE = BE2.CRNODE
                                                AND       BE2.RECORDCD = 'O'
                        WHERE (BE.CLMN = P_CLMN OR BE.ALTC IN (P_ALTC1,P_ALTC2,P_ALTC3,P_ALTC4 ))
                                                                                                AND BE2.CRDATTIM < P_STRCRDATTIM

                                                ORDER BY AwdObjectID desc

                                                FETCH FIRST 10 ROWS ONLY;


                OPEN C1 ;

END P1;
package com.test;

import java.sql.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;

import com.ibm.db2.jcc.DB2Types;



public class FolderRestructure {

    private static final String DB_DRIVER = "com.ibm.as400.access.AS400JDBCDriver";
    private static final String DB_CONNECTION = "jdbc:as400://XXX.40.103.XXX/ABC";
    private static final String DB_USER = "ABC";
    private static final String DB_PASSWORD = "DEF";


    public static void main(String[] argv) {

        try {

            callOracleStoredProcCURSORParameter();

        } catch (SQLException e) {

            System.out.println(e.getMessage());

        }

    }

    private static void callOracleStoredProcCURSORParameter()
            throws SQLException {

        Connection dbConnection = null;
        CallableStatement callableStatement = null;
        ResultSet rs = null;

        String getDBUSERCursorSql = "{call ZSPPQCIMGL(?,?,?,?,?,?,?)}";
        // String getDBUSERCursorSql = "{call ZSPQALLIMGLKP(?,?,?,?,?,?,?,?)}";
        //call ZSPPQCIMGL('12021000012A','CHAVA-00001','CHAVA-00001','CHAVA-00001','CHAVA-00001','2017-08-04-23.59.59.999999','4');
        try {

            Timestamp timestamp = null;

            try {
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSSSSS");
                java.util.Date parsedDate = dateFormat.parse("2017-08-08 23:59:59.999999");
                 timestamp = new java.sql.Timestamp(parsedDate.getTime());
            } catch(ParseException e) { //this generic but you can control another types of exception
                 System.out.println(e.getMessage());
            }
            dbConnection = getDBConnection();
            callableStatement = dbConnection.prepareCall(getDBUSERCursorSql);
            callableStatement.setString(1, "12021000012A");
            callableStatement.setString(2, "CHAVA-00001");
            callableStatement.setString(3, "CHAVA-00001");
            callableStatement.setString(4, "CHAVA-00001");
            callableStatement.setString(5, "CHAVA-00001");
            callableStatement.setTimestamp(6, timestamp);
            callableStatement.setString(7, "4");
            //callableStatement.registerOutParameter(8, DB2Types.CURSOR);
                //P_CLMN=12021000012A, P_STRCRDATTIM=9999-99-99 99:99:99.999999, P_PAGESIZE=4, P_ALTC3=CHAVA-00001, P_ALTC4=CHAVA-00001, P_ALTC1=CHAVA-00001, P_ALTC2=CHAVA-00001
           /* callableStatement.setString(1, "DT207030");
            callableStatement.setString(2, "KKMTEST2000");
            callableStatement.setString(3, "");
            callableStatement.setString(4, "2XSRCTYP");
            callableStatement.setString(5, "0000-00-00 00:00:00.000000");
            callableStatement.setString(6, "9999-99-99 99:99:99.999999");
            callableStatement.setString(7, "9999-99-99 99:99:99.999999");*/



            // execute getDBUSERCursor store procedure
            rs = callableStatement.executeQuery();

            // get cursor and cast it to ResultSet
            //rs = (ResultSet) callableStatement.getObject(7);

            while (rs.next()) {
                //  CASEID , CASEBA, CASEWK,  CASESTA,  CASEQUE, ISSUEID , ISSUEBA,  ISSUEWK,  ISSUESTA,  ISSUEQUE,  ISSUEASIGNID,
                //         OBJECTID ,  OBJECTBA, OBJECTWK, OBJECTPHYFILEID,  OBJECTCREATEDUSERID

                //W0.OBJTYPE AS SourceType, W0.OBJECTID AS PhisyscalFileRef, CRUSERID as CreatedUserID,BE.CLMN AS ClaimNumber, 
                //W03.UNITCD as TransBusinessArea,W03.WRKTYPE as TransWorkType,W03.STATCD as TransStatus,W03.QUEUECD as TransQueue
                System.out.println("CRDATIM : " + rs.getString("CRDATETIME"));
                System.out.print("  AwdObjectID : " + rs.getString("AwdObjectID"));
                System.out.print("  AWDTransId : " + rs.getString("AWDTransId"));
                System.out.print("  BusinesArea : " + rs.getString("BusinesArea"));
                System.out.print("  SourceType : " + rs.getString("SourceType"));
                System.out.print("  PhisyscalFileRef : " + rs.getString("PhisyscalFileRef"));
                System.out.print("  CreatedUserID : " + rs.getString("CreatedUserID"));
                System.out.print("  ClaimNumber : " + rs.getString("ClaimNumber"));
                System.out.print("  TransBusinessArea : " + rs.getString("TransBusinessArea"));
                System.out.print("  TransWorkType : " + rs.getString("TransWorkType"));
                System.out.print("  TransStatus : " + rs.getString("TransStatus"));
                System.out.print("  TransQueue : " + rs.getString("TransQueue"));

             /*   String userid = rs.getString("ISSUEID");
                String userName = rs.getString("ISSUEBA");
                String createdBy = rs.getString("ISSUEWK");
                String createdDate = rs.getString("ISSUESTA");

                System.out.print("  ISSUEID : " + userid);
                System.out.print("  ISSUEBA : " + userName);
                System.out.print("  ISSUEWK : " + createdBy);
                System.out.print("  ISSUESTA : " + createdDate);*/
                // System.out.println("created : " + rs.getString("CASEQUE"));

               /* System.out.println("AwdObjectID : " + userid);
                System.out.println("BusinesArea : " + userName);
                System.out.println("SourceType : " + createdBy);
                System.out.println("PhisyscalFileRef : " + createdDate);
                System.out.println("created : " + rs.getString("CASEQUE"));*/
            }

        } catch (SQLException e) {

            System.out.println(e.getMessage());

        } finally {

            if (rs != null) {
                rs.close();
            }

            if (callableStatement != null) {
                callableStatement.close();
            }

            if (dbConnection != null) {
                dbConnection.close();
            }

        }

    }

    private static Connection getDBConnection() {

        Connection dbConnection = null;

        try {

            Class.forName(DB_DRIVER);

        } catch (ClassNotFoundException e) {

            System.out.println(e.getMessage());

        }

        try {

            dbConnection = DriverManager.getConnection(
                    DB_CONNECTION, DB_USER,DB_PASSWORD);
            return dbConnection;

        } catch (SQLException e) {

            System.out.println(e.getMessage());

        }

        return dbConnection;

    }
}

看起来您确实从过程中返回了光标。因此,它是
函数

试试这个:
is function=“true”


如果为“true”,则调用SQL函数。那么
“存储过程名称”属性定义
被调用函数的名称。

我在*N中找到了错误
[SQL0440]例程ZSPPQCIMGL,但没有找到指定参数。
添加
后是function=“true”
。确定。请显示,然后工作
callablestatement
进行比较。您是指工作
callablestatement
的任何屏幕打印?将代码添加到问题中。请看一看。将网关中的第6个
P\u STRCRDATTIM
也声明为
时间戳如何?看看您的
CallableStatement
示例,我会说它在任何方面都完全是`is function=“true”。您的参数定义不兼容的问题
 <xsd:attribute name="is-function" default="false">
    <xsd:annotation>
        <xsd:documentation>
            If "true", a SQL Function is called. In that case
            the "stored-procedure-name" attribute defines
            the name of the called function.
        </xsd:documentation>
    </xsd:annotation>
    <xsd:simpleType>
        <xsd:union memberTypes="xsd:boolean xsd:string" />
    </xsd:simpleType>
</xsd:attribute>