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 :
Our Spring configuration file 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 ;
If we use the attached version of StoredProcedureItemReader erveything works fine.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>
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


Reply With Quote