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 :
Je ne désire pas trouver de solution altérnative ou de code optimisé, c'est déjà fait.
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
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 cherche juste à comprendre le pourquoi du comment
Merci d'avance.
Partager