쿼리를 열심히 짜고 보니
5 / 10
어떤 집계 개수 / 총 개수
이런 로직이 있고
ROUND( 5 / 10 , 1) 이렇게 소수점 한 자리까지 가공하는 SQL이 존재했다.
테스트 데이터를 모두 지우고 운영에 반영하려고 할 때 문제가 발생했다.
1 / 0 , 0 / 0 -> 모두 Sql에서 에러가 튀어나왔다...
0으로 나눌 수 없다는 에러였다.
대충 어떤 쿼리인지 설명을 해보자면
SELECT NVL(COUNT(ABC), 0) / NVL(COUNT(TOTAL), 0)
FROM TEST_TABLE
GROUP BY ~~;
나름 NULL의 경우를 커버한다고 설정해두었지만,
저 경우에는 NULL로 나눠야 해결이 가능한 문제였다.
0으로 나눌 수 없고, NULL로는 나눌 수 있다.
NULLIF를 사용해서 해결하였다.
SELECT NVL(COUNT(ABC), 0) / NULLIF(COUNT(TOTAL), 0)
FROM TEST_TABLE
GROUP BY ~~;
NULLIF는 앞에 있는 파라미터가 0일시 NULL로 변환시켜준다.