2015-01-22 2 views
0

나는 다음과 같은 오류가 발생합니다 :스프링 배치 StoredProcedureItemReader

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: L'index 0 du paramètre de sortie n'est pas valide. 
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190) 
    at com.microsoft.sqlserver.jdbc.SQLServerCallableStatement.getterGetParam(SQLServerCallableStatement.java:354) 
    at com.microsoft.sqlserver.jdbc.SQLServerCallableStatement.getObject(SQLServerCallableStatement.java:659) 
    at org.springframework.batch.item.database.StoredProcedureItemReader.openCursor(StoredProcedureItemReader.java:214) 
    ... 18 more 

저장 프로 시저 오류에 대한 책임이 테이블을 만들 명령이 포함되어 있습니다.

저장 프로 시저 :

ALTER PROCEDURE [dbo].[TEST] 
    @orgKeyParam bigint 
AS 
BEGIN 

CREATE TABLE #tmpPatients (
    programID bigint NOT NULL) 

drop table #tmpPatients; 

SELECT last_name from patient; 
END 

StoredProcedureItemReader 구성 : 저장 프로 시저 또는 사용자가 설정 한 방법을 보지 않고

<bean id="DBReader" 
     class="org.springframework.batch.item.database.StoredProcedureItemReader"> 
     <property name="dataSource" ref="dataSource2" /> 
     <property name="procedureName" value="[${sql.RPMDBName}].dbo.Test" /> 
     <property name="fetchSize" value="50" /> 
       <property name="parameters"> 
      <list> 
       <bean class="org.springframework.jdbc.core.SqlParameter"> 
        <constructor-arg index="0" value="orgKeyParam" /> 
        <constructor-arg index="1"> 
         <util:constant static-field="java.sql.Types.INTEGER" /> 
        </constructor-arg> 
       </bean> 
      </list> 
     </property> 
     <property name="rowMapper" ref="dataRowMapper" /> 
     <property name="preparedStatementSetter" ref="preparedStatementSetter" /> 
    </bean> 

    <bean id="preparedStatementSetter" 
     class="org.springframework.batch.core.resource.ListPreparedStatementSetter" scope="step"> 
     <property name="parameters"> 
      <list> 
       <value>1</value> 
      </list> 
     </property> 
    </bean> 

답변

0

SQL Server 저장 프로 시저에서 nocount on을 사용하십시오. 시작 문장 앞에 사용되는 Shoul b

0

StoredProcedureItemReader, 내가 당신에게 정확한 수정을 줄 수 . 그러나 인덱스 0의 매개 변수가 유효하지 않습니다. 기본적으로 StoredProcedureItemReader은 첫 번째 출력 매개 변수로 반환되는 커서를 찾습니다. 독자가 다른 곳을 보도록 독자를 구성했거나 저장 프로 시저가 첫 번째 매개 변수 인 경우 커서를 반환하지 않는다고 가정합니다.

+0

안녕하세요, 저장 프로 시저와 배치 구성을 추가했습니다. 어떤 생각이 잘못된 것입니까? –

+0

저는 SQL Server (또는 저장 프로 시저) 전문가는 아니지만 사물에 따라 저장 프로 시저에서 커서를 반환하지 않습니다. https://msdn.microsoft.com/en-us/library/ ms188655.aspx –