스프링 배치 파라미터 던지기 (전자정부프레임워크 2.7.1-32bit, java 1.6) - 재질문 2
- 작성자 :
- 김*욱
- 작성일 :
- 2015-01-22 14:59:32
- 조회수 :
- 1,417
- 구분 :
- 개발환경
- 진행상태 :
- 완료
Q
친절하게 답변해 주셔서 감사드립니다.
답 주신데로 실행하여 발생된 에러 기록합니다.
- 실행쿼리
<select id="selectSOURCE_TABLE" resultType="egovframework.rte.bat.gis.domain.TEST_RVO">
<![CDATA[
SELECT
ID
,NAME
,AGE
,LST_CHG_PGM_ID
,LST_CHG_DT
FROM (
SELECT
ID
,NAME
,AGE
,LST_CHG_PGM_ID
,LST_CHG_DT
,ROW_NUMBER() OVER (ORDER BY 1) rn
FROM (
SELECT ID
,NAME
,AGE
,CONCAT(#{BASE_DT, jdbcType=VARCHAR},'0000') AS LST_CHG_PGM_ID /* 최종변경프로그램아이디 */
,TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS') AS LST_CHG_DT /* 최종변경일시 */
FROM CITYWASTE.SOURCE_TABLE
WHERE = #BASE_DT#
))WHERE
rn > (#{_page} * #{_pagesize})
AND rn <= ( (#{_page} + 1) * #{_pagesize} )
]]>
</select>
- 발생 에러 : #BASE_DT# 가 파라미터로 인식 안됨.
14:53:40,920 DEBUG org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-1 SQLErrorCodesFactory:174 - SQL error codes for 'Oracle' found
14:53:40,920 DEBUG org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-1 SQLErrorCodeSQLExceptionTranslator:399 - Translating SQLException with SQL state '42000', error code '936', message [ORA-00936: 누락된 표현식
]; SQL was [] for task [
### Error querying database. Cause: java.sql.SQLSyntaxErrorException: ORA-00936: 누락된 표현식
### The error may exist in egovframework/sqlmap/bat/gis/sql-map-test.xml
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: SELECT ID ,NAME ,AGE ,LST_CHG_PGM_ID ,LST_CHG_DT FROM ( SELECT ID ,NAME ,AGE ,LST_CHG_PGM_ID ,LST_CHG_DT ,ROW_NUMBER() OVER (ORDER BY 1) rn FROM ( SELECT ID ,NAME ,AGE ,CONCAT(?,'0000') AS LST_CHG_PGM_ID /* 최종변경프로그램아이디 */ ,TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS') AS LST_CHG_DT /* 최종변경일시 */ FROM CITYWASTE.SOURCE_TABLE WHERE = #BASE_DT# ))WHERE rn > (? * ?) AND rn <= ( (? + 1) * ? )
### Cause: java.sql.SQLSyntaxErrorException: ORA-00936: 누락된 표현식
]
이상입니다.
확인 부탁드리겠습니다.
감사합니다.
답 주신데로 실행하여 발생된 에러 기록합니다.
- 실행쿼리
<select id="selectSOURCE_TABLE" resultType="egovframework.rte.bat.gis.domain.TEST_RVO">
<![CDATA[
SELECT
ID
,NAME
,AGE
,LST_CHG_PGM_ID
,LST_CHG_DT
FROM (
SELECT
ID
,NAME
,AGE
,LST_CHG_PGM_ID
,LST_CHG_DT
,ROW_NUMBER() OVER (ORDER BY 1) rn
FROM (
SELECT ID
,NAME
,AGE
,CONCAT(#{BASE_DT, jdbcType=VARCHAR},'0000') AS LST_CHG_PGM_ID /* 최종변경프로그램아이디 */
,TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS') AS LST_CHG_DT /* 최종변경일시 */
FROM CITYWASTE.SOURCE_TABLE
WHERE = #BASE_DT#
))WHERE
rn > (#{_page} * #{_pagesize})
AND rn <= ( (#{_page} + 1) * #{_pagesize} )
]]>
</select>
- 발생 에러 : #BASE_DT# 가 파라미터로 인식 안됨.
14:53:40,920 DEBUG org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-1 SQLErrorCodesFactory:174 - SQL error codes for 'Oracle' found
14:53:40,920 DEBUG org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-1 SQLErrorCodeSQLExceptionTranslator:399 - Translating SQLException with SQL state '42000', error code '936', message [ORA-00936: 누락된 표현식
]; SQL was [] for task [
### Error querying database. Cause: java.sql.SQLSyntaxErrorException: ORA-00936: 누락된 표현식
### The error may exist in egovframework/sqlmap/bat/gis/sql-map-test.xml
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: SELECT ID ,NAME ,AGE ,LST_CHG_PGM_ID ,LST_CHG_DT FROM ( SELECT ID ,NAME ,AGE ,LST_CHG_PGM_ID ,LST_CHG_DT ,ROW_NUMBER() OVER (ORDER BY 1) rn FROM ( SELECT ID ,NAME ,AGE ,CONCAT(?,'0000') AS LST_CHG_PGM_ID /* 최종변경프로그램아이디 */ ,TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS') AS LST_CHG_DT /* 최종변경일시 */ FROM CITYWASTE.SOURCE_TABLE WHERE = #BASE_DT# ))WHERE rn > (? * ?) AND rn <= ( (? + 1) * ? )
### Cause: java.sql.SQLSyntaxErrorException: ORA-00936: 누락된 표현식
]
이상입니다.
확인 부탁드리겠습니다.
감사합니다.
A
안녕하세요 표준프레임워크센터입니다.
MyBatis라면 #BASE_DT#를 #{BASE_DT}로 바꿔주시면 될듯 합니다.
감사합니다.
추가답변입니다.
jobparameters를 쿼리로 넘기는 방법입니다.
우선 scope=step이 들어가셔야 합니다.
job.xml의 step 부분
<bean id="ibatisToIbatisJob.ibatisToIbatisStep.ibatisItemReader"
class="org.springframework.batch.item.database.IbatisPagingItemReader" scope="step">
<property name="queryId" value="getAllCustomerCredits" />
<property name="sqlMapClient" ref="sqlMapClient" />
<property name="parameterValues">
<map>
<entry key="name" value="#{jobParameters[value]}" />
</map>
</property>
</bean>
ibatis 부분
<select id="getAllCustomerCredits" resultMap="result">
select ID, NAME, CREDIT from CUSTOMER where NAME = #name#
</select>
참고하시기 바랍니다.
MyBatis라면 #BASE_DT#를 #{BASE_DT}로 바꿔주시면 될듯 합니다.
감사합니다.
추가답변입니다.
jobparameters를 쿼리로 넘기는 방법입니다.
우선 scope=step이 들어가셔야 합니다.
job.xml의 step 부분
<bean id="ibatisToIbatisJob.ibatisToIbatisStep.ibatisItemReader"
class="org.springframework.batch.item.database.IbatisPagingItemReader" scope="step">
<property name="queryId" value="getAllCustomerCredits" />
<property name="sqlMapClient" ref="sqlMapClient" />
<property name="parameterValues">
<map>
<entry key="name" value="#{jobParameters[value]}" />
</map>
</property>
</bean>
ibatis 부분
<select id="getAllCustomerCredits" resultMap="result">
select ID, NAME, CREDIT from CUSTOMER where NAME = #name#
</select>
참고하시기 바랍니다.