Develop/CS

[Oracle] ORA-01476: 제수가 0 입니다.

연로그 2021. 8. 9. 11:23
반응형

📌 ORA-01476: 제수가 0 입니다. 에러

 

❓ 제수란?

나눗셈에서 어떤 수를 나누는 수

ex: '12 나누기 6은 2' 에서 제수는 6

 

💡 원인 발견

수학에서 어떤 수를 0으로 나누는 것은 불가능하다.

SELECT SUM(컬럼1) / COUNT(컬럼2) 식으로 되어있다고 가정할때, COUNT(컬럼2) 값이 0일 경우 위와 같은 에러가 발생한다.

 

🎉 해결 방법

NVL(), NULLIF(), DECODE()와 같은 함수를 사용해 0일 경우를 다르게 처리하면 된다.

 

몇 가지 예시를 살펴보자.

a는 10, b는 0일 경우에 a/b 결과를 구하는 SQL문이다.

10을 0으로 나누게 되므로 제수가 0이라는 에러가 발생할 것이다.

SELECT a/b
FROM (SELECT 10 AS a, 2 AS b FROM DUAL);

 

 

#ex01 NVL()과 NULLIF() 사용하기

SELECT NVL(a/NULLIF(b,0),1)
FROM (SELECT 10 AS a, 2 AS b FROM DUAL);

NULLIF()를 통해 b가 0이면 null, 그렇지 않으면 b로 변환.

NVL()를 통해 null 값이 들어오면 1 반환.

 

#ex02 NVL()과 DEOCDE() 사용하기

SELECT NVL(a/DECODE(b,0,null,b),1)
FROM (SELECT 10 AS a, 0 AS b FROM DUAL);

DECODE()를 통해 b가 0이면 null, 그렇지 않으면 b로 변환.

NVL()를 통해 null 값이 들어오면 1 반환.

 


참고

제수 뜻: https://ko.dict.naver.com/#/entry/koko/19c3bdd111c149a1890a8cbb9b4a359a

에러 해결 방법: http://blog.yes24.com/blog/blogMain.aspx?blogid=metalzang&artSeqNo=1785694 

반응형