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 :
Ce curseur est exploité comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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();
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
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.
Partager