-
[오라클] ORA-01476 : 제수가 0 입니다 Divisor is equal to zero 원인 및 해결 방법문제해결/Oracle 2023. 1. 18. 11:45반응형
[오라클]
ORA-01476
Error: # 1476
제수가 0 입니다
Divisor is equal to zero발생 원인
이거 인용문구 어케닫지🥲
SQL 쿼리 중 제수(나누는 수)가 0인 경우에 발생하는 에러이다.(이과인 내가 이런 실수를 한다고? 이건 오라클 문제야!)
일반적으로 100/0과 같은 수식이 잘못된 것은 바로 파악이 가능하고, 위와 같은 수식을 작성하는 경우는 없겠지만, 본인의 경우 컬럼간의 계산식을 넣을 때 제수에 해당하는 컬럼 중 데이터가 0이 존재할 경우를 인지하지 못하여 발생했다.(돌이켜보면 문제는 항상 나였다)
해당 컬럼에 데이터의 유형을 보장할 수 없다면 안전장치를 아래와 같이 마련해두자.해결 방법
”- 예시
SELECT COLUMN1 / COLUMN2 FROM TABLE_NAME
(원래 업무할 때는 대부분 alias를 붙이지만 여기서는 귀찮아서 못하겠다)
위와 같은 쿼리를 사용한다고 할 때 COLUMN2 의 데이터에 0인 경우가 존재하면 ORA-01476 에러가 발생한다. 해결 방법은 COLUMN2의 데이터가 0인 경우를 만나면 예외처리를 해주는 것!- CASE WHEN 사용
SELECT CASE WHEN COLUMN2 = 0 THEN 0 --예외처리 ELSE COLUMN1 / COLUMN2 END FROM TABLE_NAME
CASE WHEN으로 COLUMN2가 0인 경우에 예외 처리를 해주고 아닌 경우 수식을 사용한다.( 예외처리 결과값은 요구조건에 맞게 변경)
- DECODE 사용
SELECT DECODE(COLUMN2,0,0,COLUMN1 / COLUMN2) FROM TABLE_NAME
DECODE 함수를 지원한다면 사용할 수 있는 방법.
첫번째 예시와 마찬가지로 COLUMN2가 0인 경우에 예외 처리(0)를 해주고, 아닌 경우 나눗셈 수식을 사용한다.- NVL, NULLIF 사용
SELECT NVL(A/NULLIF(COLUMN2,0),0) FROM TABLE_NAME
NULLIF, NVL 참고 출처
https://yulsfamily.tistory.com/315NULL을 수식계산에 사용하는 경우 무조건 NULL이라는 점을 사용한 방법.
COLUMN2가 0인 경우엔 NULL을 반환하여 A와 나누고, 그 결과값이 NULL인 경우 0을 반환한다.
검색하다가 이런 방법도 있구나 해서 참고용으로 작성한다.
(개인적으로 해당 방법에 이점이 있는지 모르겠다. 창의적인 문제풀이같은 느낌)반응형'문제해결 > Oracle' 카테고리의 다른 글
[오라클] ORA-08103 객체가 더 이상 존재하지 않습니다 object no longer exists (0) 2023.01.19