Results 1 to 9 of 9

Thread: StoredProcedureItemReader error when using OUT parameters

Threaded View

  1. #1
    Join Date
    Aug 2008
    Posts
    6

    Default StoredProcedureItemReader error when using OUT parameters

    Hello,

    We are using StoredProcedureItemReader (Spring Batch 2.1.0.RELEASE) to call a DB2 stored Procedure.

    We have the following error [1]

    This error is apparently due because StoredProcedureItemReader doesn't call registerOutParameter for parameters out or in/out (it only calls this method
    for the refCursor parameter.

    Our stored DB2 procedure signature is :
    Code:
    CREATE PROCEDURE  ààD000.M10K001                                   
           ( OUT   YCDERR CHARACTER(4)                                 
            ,OUT   YCTERR CHARACTER(4)                                 
            ,OUT   YLIERR CHARACTER(72)                               
            ,IN    YCTTRB CHARACTER(1)                                 
            ,IN    K_COAPAP CHARACTER(3)                               
            ,IN    K_YCOSRV CHARACTER(1)                               
            )                                                         
           RESULT SETS         1                                       
           EXTERNAL NAME 'M10K001'                                     
           LANGUAGE            COBOL                                   
           PARAMETER STYLE     SQL                                     
           DETERMINISTIC                                               
           NULL CALL                                                   
           FENCED                                                     
           MODIFIES SQL DATA                                           
           NO DBINFO                                                   
           COLLID              C000K1                                 
           WLM ENVIRONMENT     AE_DB2T_ENV01                           
           ASUTIME LIMIT       100000                                 
           STAY RESIDENT NO                                             
           PROGRAM TYPE SUB                                             
           SECURITY            DB2                                     
           RUN OPTIONS         'MSGFILE(SYSOUT,,,,ENQ)'                 
           COMMIT ON RETURN NO                                         
           INHERIT SPECIAL REGISTERS                                   
           STOP AFTER  5       FAILURES                                 
           ;
    Our Spring configuration file is :
    Code:
    	<bean id="personnesMoralesDbReader" class="org.springframework.batch.item.database.StoredProcedureItemReader">
    		<property name="dataSource" ref="siteCentralDataSource" />
    		<property name="procedureName" value="M10K001" />
    		<property name="fetchSize" value="50"/>
    		<property name="parameters">
    			<list>
    				<bean class="org.springframework.jdbc.core.SqlOutParameter">
    					<constructor-arg index="0" value="YCDERR" />
    					<constructor-arg index="1">
    						<util:constant static-field="java.sql.Types.CHAR" />
    					</constructor-arg>
    				</bean>
    				<bean class="org.springframework.jdbc.core.SqlOutParameter">
    					<constructor-arg index="0" value="YTYERR" />
    					<constructor-arg index="1">
    						<util:constant static-field="java.sql.Types.CHAR" />
    					</constructor-arg>
    				</bean>
    				<bean class="org.springframework.jdbc.core.SqlOutParameter">
    					<constructor-arg index="0" value="YLIERR" />
    					<constructor-arg index="1">
    						<util:constant static-field="java.sql.Types.CHAR" />
    					</constructor-arg>
    				</bean>
    				<bean class="org.springframework.jdbc.core.SqlParameter">
    					<constructor-arg index="0" value="YCTTRB" />
    					<constructor-arg index="1">
    						<util:constant static-field="java.sql.Types.CHAR" />
    					</constructor-arg>
    				</bean>
    				<bean class="org.springframework.jdbc.core.SqlParameter">
    					<constructor-arg index="0" value="COAPAP" />
    					<constructor-arg index="1">
    						<util:constant static-field="java.sql.Types.CHAR" />
    					</constructor-arg>
    				</bean>
    				<bean class="org.springframework.jdbc.core.SqlParameter">
    					<constructor-arg index="0" value="YCOSRV" />
    					<constructor-arg index="1">
    						<util:constant static-field="java.sql.Types.CHAR" />
    					</constructor-arg>
    				</bean>
    			</list>
    		</property>
    		<property name="rowMapper">
    			<bean class="com.natixis.aws.personnemorale.mapping.PersonneMoraleRowMapper" />
    		</property>
    		<property name="preparedStatementSetter" ref="preparedStatementSetter" />
    	</bean>
    If we use the attached version of StoredProcedureItemReader erveything works fine.

    Should I open a JIRA issue ?

    Thanks !

    [1]
    Code:
    Caused by: org.springframework.jdbc.BadSqlGrammarException: Executing stored procedure; bad SQL grammar [{call M10K001(?, ?, ?, ?, ?, ?)}]; nested exception is com.ibm.db2.jcc.b.eo: [jcc][10143][10845][3.53.95] Paramètre non valide 1 : Le paramètre n'est pas défini ou n'est pas enregistré. ERRORCODE=-4461, SQLSTATE=42815
    	at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:98)
    	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
    	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
    	at org.springframework.batch.item.database.StoredProcedureItemReader.openCursor(StoredProcedureItemReader.java:221)
    	at org.springframework.batch.item.database.AbstractCursorItemReader.doOpen(AbstractCursorItemReader.java:401)
    	at org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader.open(AbstractItemCountingItemStreamItemReader.java:137)
    	... 44 more
    Caused by: com.ibm.db2.jcc.b.eo: [jcc][10143][10845][3.53.95] Paramètre non valide 1 : Le paramètre n'est pas défini ou n'est pas enregistré. ERRORCODE=-4461, SQLSTATE=42815
    	at com.ibm.db2.jcc.b.bd.a(bd.java:676)
    	at com.ibm.db2.jcc.b.bd.a(bd.java:60)
    	at com.ibm.db2.jcc.b.bd.a(bd.java:103)
    	at com.ibm.db2.jcc.b.hm.sc(hm.java:4276)
    	at com.ibm.db2.jcc.b.hm.e(hm.java:2989)
    	at com.ibm.db2.jcc.b.im.Ub(im.java:105)
    	at com.ibm.db2.jcc.b.im.execute(im.java:88)
    	at org.springframework.batch.item.database.StoredProcedureItemReader.openCursor(StoredProcedureItemReader.java:205)
    	... 46 more
    Attached Files Attached Files

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •