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
절에서도 파라미터를 직접 사용하면 같은 오류가 발생하므로 주의가 필요하다.