Ich habe SP mit nur 4 Ausgang params und keine Eingabe params und meine StoredProcedureItemReader conf aussehen wie diesesSpring Batch StoredProcedureItemReader StoredProc mit nur Ausgabeparameter (keine Eingabe Params)
<bean id="spItemReader">
class="org.springframework.batch.item.database.StoredProcedureItemReader" >
<property name="dataSource" ref="dataSource"/>
<property name="procedureName" value="mynamespace.spname"/>
<property name="refCursorPosition" value="1"></property>
<property name="rowMapper">
<bean class="MyRowMapper"/>
</property>
<property name="parameters">
<list>
<bean class="org.springframework.jdbc.core.SqlParameter">
<constructor-arg index="0" value="column1"/>
<constructor-arg index="1">
<util:constant static-field="java.sql.Types.SMALLINT"/>
</constructor-arg>
</bean>
<bean class="org.springframework.jdbc.core.SqlParameter">
<constructor-arg index="0" value="P_column2"/>
<constructor-arg index="1">
<util:constant static-field="java.sql.Types.VARCHAR"/>
</constructor-arg>
</bean>
<bean class="org.springframework.jdbc.core.SqlParameter">
<constructor-arg index="0" value="P_column3"/>
<constructor-arg index="1">
<util:constant static-field="java.sql.Types.INTEGER"/>
</constructor-arg>
</bean>
<bean class="org.springframework.jdbc.core.SqlParameter">
<constructor-arg index="0" value="P_column4"/>
<constructor-arg index="1">
<util:constant static-field="java.sql.Types.CHAR"/>
</constructor-arg>
</bean>
</list>
</property>
</bean>
ich die Datenquelle haben zu lesen, wie Instanz von org.springframework.jdbc.datasource.DriverManagerDataSource
und Verbinden mit DB2
mit com.ibm.db2.jcc.DB2Driver
als Treiberklasse.
Und mein Job-Konfiguration ist wie folgt:
<job id="testJob" xmlns="http://www.springframework.org/schema/batch">
<step id="step1">
<tasklet>
<chunk reader="spItemReader" writer="eventItemWriter"
commit-interval="1" />
</tasklet>
</step>
</job>
<bean id="jobRepository"
class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean">
<property name="transactionManager" ref="transactionManager" />
</bean>
<bean id="transactionManager"
class="org.springframework.batch.support.transaction.ResourcelessTransactionManager" />
<bean id="jobLauncher"
class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />
</bean>
Ich habe Schriftsteller wie StaxEventItemWriter
und richtige unmarshaller
Konfiguration.
Das Problem ist, wenn ich die Batch laufen, ich erhalte:
Caused by: org.springframework.jdbc.BadSqlGrammarException: Executing stored procedure; bad SQL grammar [{call mynamespace.spname(?, ?, ?, ?)}]; nested exception is com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-440, SQLSTATE=42884, SQLERRMC=PROCEDURE;BSCPROC.PKA109, DRIVER=4.19.26
Ich bin nicht sicher, was ich bin fehlt, bitte Rat, wie ich dieses Problem beheben sollte. Lassen Sie mich auch wissen, ob weitere Informationen benötigt werden.
Kann ich fragen, wie erhalten Sie Werte von out Parameter in RowMapper? Ich habe bemerkt, dass Sie verwendet haben –
Shilan
Bitte teilen Sie den vollen Code wenn .. Wie das aktuelle Datum als Parameter in der gespeicherten Prozedur mit diesem übergeben. – DEADEND