영보의 SystemOut.log

[Error:MyBatis] Update문 : SQL 명령어가 올바르게 종료되지 않았습니다 본문

Web/XML

[Error:MyBatis] Update문 : SQL 명령어가 올바르게 종료되지 않았습니다

영보로그 2021. 3. 24. 09:42
반응형

 오류 내용

 

# SQL: UPDATE BOARD_CATEGORY SET CATEGORYNM = ? ,ORD = ? ,DEL_YN = 'N' WHERE BOARDID = ? AND CATEGORYID = ? UPDATE CMS_BOARD_CATEGORY SET CATEGORYNM = ? ,ORD = ? ,DEL_YN = 'N' WHERE BOARDID = ? AND CATEGORYID = ? ### Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 명령어가 올바르게 종료되지 않았습니다

 

보통 이럴 경우에 쿼리오류(문법이나 세미콜론)인데,

내 경우는 다중 update foreach문이여서 난 오류였다.

 

MyBatis안에서 Oracle을 사용할 때 정말 까다로운 오류들이 많아서 정리해보려고 한다.

 

 

 해결

 

 

# 기존 쿼리

<update id="boardCategoryUpdate" parameterType="java.util.HashMap">
	<foreach collection="list" item="item" index="index">
		UPDATE BOARD_CATEGORY
		SET CATEGORYNM = #{item.categorynm, jdbcType=VARCHAR}
			,ORD = #{item.ord, jdbcType=NUMERIC}
			,DEL_YN = 'N'
		WHERE BOARDID = #{item.boardid, jdbcType=NUMERIC}
			AND CATEGORYID = #{item.categoryid, jdbcType=NUMERIC}
	</foreach>
</update>

 

 

# 변경된 쿼리

<update id="boardCategoryUpdate" parameterType="java.util.HashMap">
		<foreach collection="list" item="item" index="index" separator=";" open="DECLARE BEGIN" close="; END;">
		UPDATE BOARD_CATEGORY
		SET CATEGORYNM = #{item.categorynm, jdbcType=VARCHAR}
			,ORD = #{item.ord, jdbcType=NUMERIC}
			,DEL_YN = 'N'
		WHERE BOARDID = #{item.boardid, jdbcType=NUMERIC}
			AND CATEGORYID = #{item.categoryid, jdbcType=NUMERIC}
		</foreach>
	</update>

  == > foreach 구문 안에 separator=";" open="DECLARE BEGIN" close="; END; 부분을 추가해주었다.

반응형

'Web > XML' 카테고리의 다른 글

[XML] XML 파싱 / XML 문법  (0) 2020.10.19
[XML] XML 기초 / XML 기초 문법  (0) 2020.09.30