Bonjour,
Suite à une ORA-01555 (undo_retention étant la cause), je suis amené à modifier les dev de nos batch de nuit :
d'un for sur curseur implicite (c'est lui qui reste trop longtemps ouvert) :
je passe à une boucle avec condition d'arret :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 ... for rec in (select mes_champs from ma_table) loop begin mon_traitement(...); end; end loop; ...
Les contraintes de prod imposent un changement du code, mais j'aimerais avoir vos avis quant à l'éventuelle perte de performance sur l'ouverture/fermeture de curseurs (sachant que le traitement intérieur est relativement lourd).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 ... while 1=1 loop begin open my_cursor for select mes_champs from ma_table where flag_treatment <> 'D' and rownum = 1 ; fetch my_cursor into rec; exit when my_cursor%NOTFOUND; update ma_table set flag_treatment = 'D'; mon_traitement(...); close my_cursor; end; end loop; ...
D'avance merci,
chmanu
Partager