ORA-01476 -> CASE + Analytic function + TO_NUMBER = novi bug
Thursday, 25.06.2009 – DejanKao Å¡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 …
2 Responses to “ORA-01476 -> CASE + Analytic function + TO_NUMBER = novi bug”
bok,
daj molim te Dejane ako možeš odgovoriti na email.
By Gusar on Aug 17, 2009
@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