2 updates consécutifs, ordre d'exécution aléatoire..
Bonjour à tous,
Je vous expose mon soucis :
J'ai dû reprendre le code d'une autre personne.
C'est une procédure stockée sous oracle 10g où 2 updates sont effectués sur la même ligne.
Le premier sert à mettre la ligne à vide afin de s'assurer que les données soient réinitialisées si aucune nouvelle donnée n'est disponible.
La deuxième permet de mettre à jour les bonnes données s'il y en a.
Le problème est que, parfois, le deuxième update s'exécute avant le premier !
On a donc les données qui sont bien updatées mais ensuite, la ligne est remise à null !
J'ai même tenté de mettre un commit après le premier update mais sans succès.
Lorsque je regarde l'heure et la date à laquelle chacune a été exécutée, elles ont toutes les deux EXACTEMENT le même timestamp.
Voici la procédure :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
Procedure MyProc()
AS
myField1 number,
myField2 number,
myField3 number,
myField4 number,
CURSOR MYCURSOR IS
select c1,c2,c3,c4
from TableA where c4 IS NOT NULL;
BEGIN
update SCHEMA.TableB
set
f1 = null,
f2 = null,
f3 = null;
OPEN MYCURSOR;
LOOP
FETCH MYCURSOR INTO myField1,
myField2,
myField3,
myField4;
EXIT WHEN MYCURSOR%NOTFOUND;
update SCHEMA.TableB
set
f1 = myField1,
f2 = myField2,
f3 = myField3
where idField = c4;
END LOOP;
CLOSE MYCURSOR;
END MyProc; |
Je ne désire pas trouver de solution altérnative ou de code optimisé, c'est déjà fait.
Je cherche juste à comprendre le pourquoi du comment :lol:
Merci d'avance.