Bonjour,
En 9iR2, comment un deadlock peut-il apparaitre dans une procédure sachant que les traitement se font en vrac sur une seule table contenant un trigger qui mets à jour une autre table?
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
42
 
begin
 
curseur1
loop
   FORALL INTCONT IN 1..tableau.COUNT SAVE EXCEPTIONS
     insert into table values(...);
EXCEPTION WHEN DML_ERRORS THEN
            V_ERRORS := SQL%BULK_EXCEPTIONS.COUNT;
 
            FOR i IN 1..V_ERRORS
            LOOP
              IF SQL%BULK_EXCEPTIONS(i).ERROR_CODE = -1 THEN
                V_INDEX := SQL%BULK_EXCEPTIONS(i).ERROR_INDEX;
 
                UPDATE table
                   SET c1  = NVL(tableau2(V_INDEX),0),
                         c2  = NVL(tableau3(V_INDEX),0),
                         c3  = NVL(tableau4(V_INDEX),0),
                         c4  = NVL(tableau5(V_INDEX),0),
                         c5  = SYSDATE
                 WHERE critere1
                    AND critere2
                    AND critere3;
              END IF;
            END LOOP;
        END;
 
        FORALL INTCONT IN 1..tableau.COUNT
          UPDATE table
             SET c1  = NVL(tableau2(V_INDEX),0),
                         c2  = NVL(tableau3(V_INDEX),0),
                         c3  = NVL(tableau4(V_INDEX),0),
                         c4  = NVL(tableau5(V_INDEX),0),
 
           WHERE critere1
               AND critere2
               AND critere3
             AND   critere4;
 
 
      END LOOP;