반응형
자주 발생하는 오류는 아닐 것 같지만 충분히 겪을 수 있는 상황일 것 같은데, 검색해도 잘 안 나오길래 직접 해결해보고 공유드립니다.
에러 상황
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 > DB' 카테고리의 다른 글
[ORACLE] "May 8, 2022 12:41:37 AM" TO_DATE하기 (0) | 2022.05.12 |
---|---|
[ORACLE] 타임스탬프로 과거데이터 조회 복구하기 (TIMESTAMP) (0) | 2022.02.18 |
[Oracle] 오라클 더 크고, 작은 값 비교와 주의할 점 GREATEST, LEAST(최대/최소값) (0) | 2022.01.18 |
[Oracle] 오라클 시퀀스(Sequence) 생성/수정/삭제/currval/nextval (0) | 2021.12.30 |
[ORACLE] ORA-01732 : 뷰에 대한 조작이 부적합합니다. (0) | 2021.12.22 |
댓글