프린트 하기

OS환경 : Oracle Linux 6.8(64bit)

 

DB 환경 : Oracle Database 11.2.0.4

 

에러 : ORA-01476: divisor is equal to zero

쿼리 조회 시 에러 발생

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT * FROM(
SELECT ROUND(ELAPSED_TIME/EXECUTIONS/1000000,3) AS ELAPSED_TIME
          , LAST_ACTIVE_TIME
          , HASH_VALUE
          , SQL_TEXT 
  FROM V$SQL 
WHERE parsing_schema_name = 'SYS' 
  AND LAST_ACTIVE_TIME >= TO_DATE('20180307''YYYYMMDD')
)
 WHERE ELAPSED_TIME > 1
 order by ELAPSED_TIME desc;
                         *
ERROR at line 2:
ORA-01476: divisor is equal to zero
 

 

 

해결 방법 : 분모가 0이 안되게 쿼리 변경

분모가 0이 안되게 하는게 정답이지만 데이터 정합성, 기타 문제로 인하여 분모가 0이 될 수가 있음 

그래서 오류없이 자료를 뽑고, 분모가 0인 데이터는 0으로 표시하기 위해서 아래와 같이 SQL 수정해야함

1
SELECT NVL(분자 / DECODE(분모, 0NULL, 분모), 0)FROM 테이블;

 

 

위 쿼리에 적용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SQL>
SELECT * FROM(
SELECT ROUND(NVL((ELAPSED_TIME / DECODE(EXECUTIONS, 0NULL, EXECUTIONS)/1000000 ), 0),3)  AS ELAPSED_TIME
          , LAST_ACTIVE_TIME
          , HASH_VALUE
          , SQL_TEXT 
  FROM V$SQL 
WHERE parsing_schema_name = 'SYS' 
  AND LAST_ACTIVE_TIME >= TO_DATE('20180307''YYYYMMDD')
)
 WHERE ELAPSED_TIME > 5
 order by ELAPSED_TIME desc;
 
ELAPSED_TIME LAST_ACTIVE_ HASH_VALUE
------------ ------------ ----------
SQL_TEXT
---------------------------------------------------------
       6 22-OCT-21        84828483
call dbms_stats.gather_database_stats_job_proc (  )

 

 

원인 : 분모가 0이어서 발생하는 문제.

 

 

참조 : http://woogi.net/80129466651