[Oracle 9i] Bulk collect douteux
Bonjour,
Dans un traitement PL/SQL qui passe tous les jours chez un client depuis des mois, j'utilise un bulk collect dans un curseur.
Le curseur est déclaré comme ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
cursor c_ldec (deccod mdecs.dec_cod%type, tcmu mdecs.dec_tcmu%type) is
select ldec_dpa_initial,
format_ps_corse(ldec_nexec) as ldec_nexec,
ldec_nexec as ldec_nexec_orig,
ldec_spe_clas,
from mldecs, macts
where ldec_dec_cod = deccod;
type tab_ligne_dec is table of c_ldec%rowtype;
pck_tab_ligne_dec tab_ligne_dec := tab_ligne_dec(); |
Ce curseur est exploité comme ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
open c_ldec(r_dec.t303_dec_cod, r_gen.dec_tcmu);
fetch c_ldec bulk collect into pck_tab_ligne_dec;
close c_ldec;
if pck_tab_ligne_dec.count > 0 then
for i in pck_tab_ligne_dec.first..pck_tab_ligne_dec.last
loop
if pck_tab_ligne_dec.exists(i) then
...
if pck_tab_ligne_dec(i).LDEC_NEXEC is not null then
...
else
-- PASSE ICI !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
end if;
end if;
end loop;
end if; |
Tous les jours, ce curseur lit des milliers d'enregistrements, tout marche bien...sauf pour très très peu d'enregistrement pour lequel il passe dans le ELSE du IF ci-dessus alors que la zone LDEC_NEXEC n'est jamais nulle.
Je précise que la fonction format_ps_corse() appelée dans le SELECT marche très bien (jamais d'erreur) et ne renvoie jamais null (vérifié via les traces de mon traitement).
Quelqu'un aurait-il une idée ?
Un quelconque problème sur le BULK COLLECT est-il connu ? (je ne trouve rien sur le support d'Oracle).
Merci d'avance pour vos réponses.