본문 바로가기
IT/DB

[Mybatis] java.lang.RuntimeException: parameter[MI] no set 해결방법

by 스터딩아재 2022. 4. 8.
반응형
자주 발생하는 오류는 아닐 것 같지만 충분히 겪을 수 있는 상황일 것 같은데, 검색해도 잘 안 나오길래 직접 해결해보고 공유드립니다.

에러 상황

java.lang.RuntimeException: parameter[MI] no set

분명 DB툴에서는 정상 작동하는데 서버에서 실행하니 위 에러가 발생합니다.
MI가 뭘까 한참 고민했는데, 문제는 SQL에 있었습니다.

문제 SQL 예시

SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')
FROM DUAL


문제는 Mybatis에서 콜론(:)은 파라미터를 받을 때 쓰는 특수문자이기 때문입니다.

분을 나타내는 :MI가 파라미터로 인식되어 MI는 없다고 에러가 나는 것입니다.

해결방법

1) CDATA 추가

일반적으로 쿼리에서 특수문자 사용을 위해 아래처럼 CDATA를 쓰면 해결 됩니다. 다만 저는 해결되지 않았고 2번 방법으로 해결했습니다.

<![CDATA[
    SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')
    FROM DUAL
]]>


2) CHR(58)로 표현

아래와 같이 수정하고 해결됐습니다.

SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24' ||CHR(58)|| 'MI' ||CHR(58)|| 'SS')
FROM DUAL


CHR(58)은 콜론을 의미하며,
ASCII(':')을 실행해보면 해당 문자 :의 아스키 코드인 58이 조회 됨을 확인 가능합니다.

비슷한 상황에서 다른 문자때문에 문제라면 ASCII(찾을문자)로 찾으시면 됩니다.


다른 IT글 보러가기

'IT' 카테고리의 글 목록

IT, 육아, 게임, 생활정보 등 각종 컨텐츠 노트 겸 공유

studyingazae.tistory.com

그리드형

댓글