ORA-01476 -> CASE + Analytic function + TO_NUMBER = novi bug

Thursday, 25.06.2009 – Dejan

Kao Å¡to sam već nedavno pisao, prilikom programiranja jedne procedure, dobijao sam konstantno exception sa greÅ¡kom “ORA-01476: divisor is equal to zero“, iako NE BI TREBALA da se pojavi u tom sluÄaju. Ponoviću opet onaj test case iz prethodnog posta:

Konkretnije reÄeno, greÅ¡ka se javlja pri ugniježđenom koriÅ¡tenju analitiÄkih funkcija (npr. SUM() OVER() i td.) i funkcije TO_NUMBER(string) kada string sadrži nulu (‘0’) i to u sluÄaju kada se radi operacija dijeljenja:

create table ora01476(
 num_id      number,
 string_col  varchar2(64)
 );
 
insert into ora01476
select numval, stringval
  from (select column_value as stringval 
          from table (sys.ODCIVarchar2List('0','1','2','3'))
       ) strings,
      (select column_value as numval
        from table(sys.odcinumberlist(0, 1,2,3,4))
      ) numbers;
      
commit;

Nakon ovog upita:

     
select CASE 
         WHEN num_id = 0 OR string_col='0'
         THEN 0
         ELSE sum(num_id / TO_NUMBER(string_col)) over(partition by num_id)
       END as result
  from ora01476;

javlja se greška:

ORA-01476: divisor is equal to zero

PoÅ¡to sam sumnjao da se radi o bugu, otvorio sam novi Service Request na MetaLinku. StruÄnjaci iz Oraclea su utvrdili da je u pitanju novi bug i dodijelili su mu broj 8630202 . Trenutno se vrÅ¡i bug screening, pa ću prenijeti novosti, kada ih bude bilo …

  1. 2 Responses to “ORA-01476 -> CASE + Analytic function + TO_NUMBER = novi bug”

  2. bok,

    daj molim te Dejane ako možeš odgovoriti na email.

    By Gusar on Aug 17, 2009

  3. @Gusar: Ako si ti Marko, koji pita u vezi sertifikata za 11g i posla kao junior DBA, onda sam ti odgovorio na email. 🙂 Ako nisi, onda tvoj email nije ni stigao u moj mailbox…

    By Dejan on Aug 17, 2009

Post a Comment