[Spring/Mybatis] ORA-00970: GROUP BY 표현식이 아닙니다.

예원·2022년 9월 7일
0

Spring 글 모아보기

목록 보기
7/17

상황

Oracle 에서 GROUP BY 를 사용하여 쿼리가 잘 동작하는 것을 확인 한 후 Mybatis 으로 작성하였더니 오류가 발생하였다.

원인

Mybatis 에서는 GROUP BY 절에 있는 파라미터 때문에 에러가 발생하였다.

해결

해결 방안으로는 다음과 같은 방법이 있다.
1. #{} -> ${} 로 변경(보안상의 위험이 있음)
2. InLine View 적용

InLine View 를 사용하면 아래와 같이 해결할 수 있다.

SELECT
	SCHOOL
	, CLASS
FROM (
	SELECT
		SCHOOL
		, #{CLASS}
	FROM TEST
)
GROUP BY SCHOOL, CLASS

현재는 날짜를 기준으로 GROUP BY 절을 사용해야 하므로
위의 방안이 아닌 choose ~ when ~ otherwise 문을 사용하여 해결하였다.

SELECT 
	DATE_COUL
	, SUM(SCORE)
FROM
	TEST
<choose>
	<when test="type == 'yyyy'">
		GROUP BY ROLLUP(TO_CHAR(DATE_COUL, 'yyyy')) 
	</when>
	<when test="searchType == 'yyyy-mm'">
		GROUP BY ROLLUP(TO_CHAR(DATE_COUL, 'yyyy-mm')) 
	</when>
	<otherwise>
		GROUP BY ROLLUP(TO_CHAR(DATE_COUL, 'yyyy-mm-dd')) 
	</otherwise>
</choose>

추가사항

DECODE 절에서도 파라미터를 직접 사용하면 같은 오류가 발생하므로 주의가 필요하다.

0개의 댓글