OfficeWriter 라이브러리를 이용하여 C# Form으로 기업별 연간 학습 보고서를 엑셀파일로 만들어주는 프로그램이있다.
해당 프로그램이 너무 노후화되고 여러가지오류( 향후 아티클로 다시 다뤄볼것이다.)가 있어서 Spring Batch로의 전환작업을 하고있는데, 프로시저에서 결과를 받아와 리스트로 반환하는 작업 중에 며칠을 검색해봐도 답이 나오지 않는 문제가 있었다.

Batch 내 Processor부분

프로시저 소스

문제의 오류
계속 Current CallableStatement ou was not a ResultSet, but getResultList was called 오류가 났는데 출력 값이 없는 프로시저 호출이라고 떴다.
분명 프로시저 내에선 select query만 있는데 왜 자꾸 출력값이 없다고하지?

public List<R> getResultList() {
if (this.getMaxResults() == 0) {
return Collections.EMPTY_LIST;
} else {
try {
Output rtn = this.outputs().getCurrent();
if (!ResultSetOutput.class.isInstance(rtn)) {
throw new IllegalStateException("Current CallableStatement ou was not a ResultSet, but getResultList was called");
} else {
return ((ResultSetOutput)rtn).getResultList();
}
} catch (NoMoreReturnsException var2) {
return null;
} catch (HibernateException var3) {
throw this.getExceptionConverter().convert(var3);
} catch (RuntimeException var4) {
this.getProducer().markForRollbackOnly();
throw var4;
}
}
}


문제는 SET NOCOUNT ON에 있었다.
SET NOCOUNT ON의 공식문서
"ON경우 SET NOCOUNT 개수가 반환되지 않습니다. 이 경우 SET NOCOUNT OFF개수가 반환됩니다.
이 함수는 @@ROWCOUNT 다음과 같은 경우에도 SET NOCOUNT 업데이트됩니다 ON."
ON인 경우 결과 행의 수를 반환하지 않고 OFF인경우 반환한다.
"~~행이 영향을 받음" 이 문구 때문에 select문으로 인식하지 않아 getResultList를 사용할 수 없었던 것이다.