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