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 : 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 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


Merci d'avance.