BATCH 작성 시 SQL 오류가 발생합니다.
- 작성자 :
- 오*근
- 작성일 :
- 2017-06-12 18:11:30
- 조회수 :
- 3,360
- 구분 :
- 공통컴포넌트
- 진행상태 :
- 완료
Q
안녕하세요.
이번에 배치를 만들고 있는데, 아래와 같이 오류가 나고 있어요.
2017-06-12 13:48:20,166 INFO [org.springframework.batch.core.job.SimpleStepHandler] Executing step: [aPushMessageStep]
2017-06-12 13:48:20,241 INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml]
2017-06-12 13:48:20,266 INFO [org.springframework.jdbc.support.SQLErrorCodesFactory] SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]
2017-06-12 13:48:20,271 ERROR [org.springframework.batch.core.step.AbstractStep] Encountered an error executing the step
org.springframework.jdbc.BadSqlGrammarException: SqlMapClient operation; bad SQL grammar []; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in egovframework/sqlmap/bat/aPush_Batch_SQL.xml.
--- The error occurred while executing query procedure.
--- Check the CALL SP_BATCH_PUSH001_SEL().
--- Check the SQL Statement (preparation failed).
--- Cause: java.sql.SQLException: Unexpected token: SP_BATCH_PUSH001_SEL in statement [CALL SP_BATCH_PUSH001_SEL()]
1) 프로시저만 따로 실행해봤을 때는 오류 없이 잘 실행됩니다. 대략 이런 내용이예요.
프로시저명 : SP_BATCH_PUSH001_SEL
input, output parameter 없음.
SELECT A.DOC_NO
, A.TITLE
, A.SUB_TITLE
, C.IMEI
, C.SEND_KEY
, C.OS_CD
FROM 테이블 A, 테이블 B, 테이블 C
WHERE 조건 ;
2) XML은 아래와 같이 했습니다.
<resultmap id="result" class="pushBatch.rte.bat.domain.trade.PushMessageCredit" />
<result property="docNo" column="DOC_NO" />
<result property="title" column="TITLE" />
<result property="subTitle" column="SUB_TITLE" />
<result property="imei" column="IMEI" />
<result property="tokenKey" column="SEND_KEY" />
<result property="osCd" column="OS_CD" />
<procedure id="getPushMessage" resultmap="result" remapresults="true" />
{ CALL SP_BATCH_PUSH001_SEL() }
<update id="updatePushTaget" parameterClass="pushBatch.rte.bat.domain.trade.PushMessageCredit" >
update TBL_PUSH_TAGT set SEND_YN = Y where DOC_NO = #docNo#
어떤 부분이 문제인지 도와주세요.
끝까지 읽어주셔서 감사합니다.
이번에 배치를 만들고 있는데, 아래와 같이 오류가 나고 있어요.
2017-06-12 13:48:20,166 INFO [org.springframework.batch.core.job.SimpleStepHandler] Executing step: [aPushMessageStep]
2017-06-12 13:48:20,241 INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml]
2017-06-12 13:48:20,266 INFO [org.springframework.jdbc.support.SQLErrorCodesFactory] SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]
2017-06-12 13:48:20,271 ERROR [org.springframework.batch.core.step.AbstractStep] Encountered an error executing the step
org.springframework.jdbc.BadSqlGrammarException: SqlMapClient operation; bad SQL grammar []; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in egovframework/sqlmap/bat/aPush_Batch_SQL.xml.
--- The error occurred while executing query procedure.
--- Check the CALL SP_BATCH_PUSH001_SEL().
--- Check the SQL Statement (preparation failed).
--- Cause: java.sql.SQLException: Unexpected token: SP_BATCH_PUSH001_SEL in statement [CALL SP_BATCH_PUSH001_SEL()]
1) 프로시저만 따로 실행해봤을 때는 오류 없이 잘 실행됩니다. 대략 이런 내용이예요.
프로시저명 : SP_BATCH_PUSH001_SEL
input, output parameter 없음.
SELECT A.DOC_NO
, A.TITLE
, A.SUB_TITLE
, C.IMEI
, C.SEND_KEY
, C.OS_CD
FROM 테이블 A, 테이블 B, 테이블 C
WHERE 조건 ;
2) XML은 아래와 같이 했습니다.
<resultmap id="result" class="pushBatch.rte.bat.domain.trade.PushMessageCredit" />
<result property="docNo" column="DOC_NO" />
<result property="title" column="TITLE" />
<result property="subTitle" column="SUB_TITLE" />
<result property="imei" column="IMEI" />
<result property="tokenKey" column="SEND_KEY" />
<result property="osCd" column="OS_CD" />
<procedure id="getPushMessage" resultmap="result" remapresults="true" />
{ CALL SP_BATCH_PUSH001_SEL() }
<update id="updatePushTaget" parameterClass="pushBatch.rte.bat.domain.trade.PushMessageCredit" >
update TBL_PUSH_TAGT set SEND_YN = Y where DOC_NO = #docNo#
어떤 부분이 문제인지 도와주세요.
끝까지 읽어주셔서 감사합니다.
A
안녕하세요.
sql문법오류로 프로시져까지 책크를 해보셨으면 resultmap의 컬럼 타입도 확인이 필요해 보입니다.
그리고 DAO에서 프로시져를 호출하실 때 어떤 명령어를 사용하였는지도 확인 필요할 듯합니다.
* queryForList() : 반환 값이 1개 이상
* queryForObject() : 반환값이 1개 인 경우
* update() : 결과 반환이 없거나, 파라미터에 결과셋을 셋팅하지 않을 경우
프로지셔에 문제가 없다면 이전 설정들을 확인하시거나, 또는 매우 단순한 프로시져 호출 부터 성공하시면서
문제를 파악하시는 것이 효율적일 듯합니다.
감사합니다.
sql문법오류로 프로시져까지 책크를 해보셨으면 resultmap의 컬럼 타입도 확인이 필요해 보입니다.
그리고 DAO에서 프로시져를 호출하실 때 어떤 명령어를 사용하였는지도 확인 필요할 듯합니다.
* queryForList() : 반환 값이 1개 이상
* queryForObject() : 반환값이 1개 인 경우
* update() : 결과 반환이 없거나, 파라미터에 결과셋을 셋팅하지 않을 경우
프로지셔에 문제가 없다면 이전 설정들을 확인하시거나, 또는 매우 단순한 프로시져 호출 부터 성공하시면서
문제를 파악하시는 것이 효율적일 듯합니다.
감사합니다.