ORA-00933: SQL command not properly ended

기르기르·2022년 11월 17일
1
post-custom-banner


강의에서 로그인 기능 구현 강의 중


뜬금 없이 이런 에러를 만나게 되었다.

이전에도 가끔 보았던 에러인데 이 에러는 고맙게도 직관성이 좋아서 에러 뒤에 설명이 잘 적혀있다.
바로 SQL 구문 마무리가 잘못되었다는 에러인데 주로 mybatis.mapper.*.xml에서 깜빡하고 ;을 붙일 때 자주 일어나는 에러이기에 바로 확인을 해보았지만 전혀 이상한 점이 없었다.

	<select id="selectUserByMap" parameterType="map" resultType="UserDTO">
		SELECT USER_NO, ID, PW, NAME, GENDER, EMAIL, MOBILE, BIRTHYEAR, BIRTHDAY
		  FROM USERS
		  <where>
			 <if test="id != null"> ID = #{id}</if>
			 <if test="pw != null"> PW = #{pw}</if>
			 <if test="email != null"> EMAIL = #{email}</if>
		 </where>
	</select>

(스크롤이 생기는게 싫어서 select 부분의 칼럼 다수를 임의로 삭제했다.)
다시 천천히 console 창에 뜬 log를 보니

where 부분에 ID = ? AND PW = ? 이어야 하는데 ID =? PW = ?으로 읽히게 되어 에러가 일어난 것이였다..
알고보니

	<select id="selectUserByMap" parameterType="map" resultType="UserDTO">
		SELECT USER_NO, ID, PW, NAME, GENDER, EMAIL, MOBILE, BIRTHYEAR, BIRTHDAY
		  FROM USERS
		  <where>
			 <if test="id != null"> ID = #{id}</if>
			 <if test="email != null"> EMAIL = #{email}</if>
             <if test="id != null and pw != null"> ID = #{id} AND PW = #{pw}</if>
		 </where>
	</select>

로 본래 썼다가 강사님이 쓴 게 성능상 더 좋아 보이는군 싶어서 바꾸다가 AND를 빼먹은..

바꾼 뒤로는 아주 잘 된다.

post-custom-banner

0개의 댓글