[ORACLE] ORA-01476: 제수가 0 입니다. 에러 발생하는 경우 대처방법.
|
|
나누기 연산 하는 경우거나 평균값을 구하는 경우에 분모 값이 0 인 상태에서 연산을 하면 에러(ORA-01476)가 발생하는데...
이 경우 아래와 같은 예제를 활용하시면 해결하실 수 있습니다.
-- ORA-01476: 제수가 0 입니다.
-- 나누기 연산을 하여 값을 구하는 경우
select a/b result
from (select 100 a, 0 b from dual)
-- ORA-01476: 제수가 0 입니다.
-- 두개의 값에 따라 평균값을 구하는 경우
select avg(a/b) result
from (select 100 a, 0 b from dual)
-- NULLIF 함수를 사용하여 처리
-- 분모가 0 인 경우에 결과값은 0
select nvl(avg(a/nullif(b,0)),0) result
from (select 100 a, 0 b from dual)
-- 결과값 : 2, 0.5
select avg(200/100) result from dual
select avg(100/200) result from dual
-- DECODE 함수를 사용하여 처리.
select decode(b,0,0,null,0, a/b) result
from (select 100 a, 0 b from dual)
-- ORA-01476: 제수가 0 입니다.
-- AVG 함수를 사용하는 경우에는 분자/분모 모두 "0"이 아니여야 하므로
-- 아래와 같이 DECODE, NULLIF 함수를 사용하면 해결할 수 있음.
select decode(sum(b),0,0,null,0, avg(a/b)) result
from (
select 1001 a, 16 b from dual union all
select 2002 a, 10 b from dual
)
-- 131.38125 결과값
-- ROUND 함수로 인한 결과값 반올림(131.4)
select ROUND(decode(sum(b),0,0,null,0, avg(a/b)),1) result
from (
select 1001 a, 16 b from dual union all
select 2002 a, 10 b from dual
)
-- 131.38125 결과값
-- 지정한 소수점 단위로 절삭한다.(131.3)
select trunc(decode(sum(b),0,0,null,0, avg(a/b)),1) result
from (
select 1001 a, 16 b from dual union all
select 2002 a, 10 b from dual
)