인덱스 {}이(가) 범위를 벗어났습니다.
알다가도 모르겠는 이번 에러 문제!!
고객사 운영 유지보수 중 다음과 같은 에러가 발생한다는 문의가 들어왔다.
처음에는 컬럼 자릿수 문제인가 했는데 그런건 아니고....
문제되는 화면의 해당 쿼리를 DB에서 실행 했을 때는 에러 없이 잘 조회 되었는데, 왜 이런 에러가 날까....?
알고보니 XML파일에서 해당 쿼리를 실행 하였을 때 라인주석처리( -- )로 인해 발생하는 에러였다.
아니!!! 라인 주석처리 기존에 잘 쓰고 있는데 왜 에러가 나는 거냐구여ㅠㅠ
보통 DB에서는 /* */ , -- 등의 주석처리가 실행되는데 문제 없지만, Ibatis에서 라인주석( -- )을 사용하는 경우 내부파싱에 의 주석처리가 아닌 한 줄로 쿼리를 실행하게 된다.
즉, 코드를 작성할 때 Enter로 줄바꿈을 하였지만 Ibatis에서 컴파일 할 경우 Enter로 줄바꿈을 하지 않고 한 줄로 동작하기 때문이다.
예를 들어 아래와 같은 쿼리 조회 시 일부 컬럼을 주석처리 했다고 가정했을 때,
SELECT BO.TITLE --게시물 제목
, BO.BOARD_ID --게시물 ID
FROM USED_GOODS_BOARD BO
INNER JOIN USED_GOODS_REPLY RE ON BO.BOARD_ID = RE.BOARD_ID --
WHERE TO_CHAR(BO.CREATED_DATE,'YYYYMM') = '202210'
ORDER BY RE.CREATED_DATE, BO.TITLE
-- [프로그래머스/SQL] 조건에 부합하는 중고거래 댓글 조회하기 게시물 참조
Ibatis에서는 아래와 같은 쿼리로 변경되어 동작한다.
SELECT BO.TITLE --게시물 제목
, BO.BOARD_ID --게시물 ID
FROM USED_GOODS_BOARD BO -- INNER JOIN USED_GOODS_REPLY RE ON BO.BOARD_ID = RE.BOARD_ID
WHERE TO_CHAR(BO.CREATED_DATE,'YYYYMM') = '202210'
-- [프로그래머스/SQL] 조건에 부합하는 중고거래 댓글 조회하기 게시물 참조
해결방법
일반 라인주석(--)이 아닌 /* 내용 */ 주석 또는 <!-- --> 주석을 사용하니 정상적으로 실행되는 것을 확인했다!
Character Set을 확인해서 jsp파일, xml파일, DB, Tomcat등이 동일하게 설정되어있다면 에러가 나지 않지만 일일이 Character Set을 확인할 수 없기 때문에 그리고 어디서 라인 주석 처리가 잘못 컴파일 되는지 알 수 없기 때문에 XML파일에서 주석처리 시 일반 라인 주석( -- )이 아닌 전체 주석을 권고합니당
'개발일지 > 어!?' 카테고리의 다른 글
[VScode] The window terminated unexpectedly (reason: 'oom', code: '-536870904') (0) | 2024.06.04 |
---|