Bonjour, je suis entrain de programmer une procédure modifier et j'ai une erreur de ressource busy à chaque que j'essaie de tester ma procédure et pourtant j'utilise une seule session. voici le code de ma 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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
PROCEDURE Modifier (Ancien IN Nageurs%ROWTYPE, Nouveau IN Nageurs%ROWTYPE)
IS
 cNom Nageurs.NOM%TYPE;
 cPrenom Nageurs.PRENOM%TYPE;
 cAnnee Nageurs.ANNEENAISS%TYPE;
 cSexe Nageurs.SEXE%TYPE;
 cClub Nageurs.CLUB%TYPE;
 cCodePostal Nageurs.CODEPOSTAL%TYPE;
 AnneeInfo InfoGenerales.ANNEEENCOURS%TYPE;
adr rowid;
 v_counter BINARY_INTEGER := 0;
 
BEGIN
   LOOP
    BEGIN
      v_counter:=v_counter+1;
     SELECT  Nom,Prenom,AnneeNaiss,Sexe,Club,CodePostal,rowid
     INTO cNom,cPrenom,cAnnee,cSexe,cClub,cCodePostal,adr
    FROM Nageurs WHERE  Nom like Ancien.Nom and Prenom like Ancien.Prenom FOR UPDATE NOWAIT;
    EXIT;
 
    EXCEPTION
        WHEN GestionException.ExcRessBusy THEN
 
            DBMS_LOCK.SLEEP(1);
            IF v_counter>6 THEN EXIT; END IF;
        WHEN NO_DATA_FOUND THEN GestionException.Declencher (GestionException.ConstAucuneDonnee);
        WHEN TOO_MANY_ROWS then GestionException.Declencher (GestionException.ConstTooManyRows );    
    END;
   END LOOP;
 
     if Nouveau.Sexe not like 'M' AND Nouveau.Sexe not like 'F' then raise GestionException.ExcSexeFalse;
              end if;
          if Nouveau.AnneeNaiss >=AnneeInfo then raise GestionException.ExcAnneeNaiss;
          end if;
 
 
 
 UPDATE Nageurs SET Nom=Nouveau.Nom, Prenom=Nouveau.Prenom,AnneeNaiss=Nouveau.AnneeNaiss,
            Sexe = Nouveau.Sexe,Club=Nouveau.Club,CodePostal = Nouveau.CodePostal 
            WHERE rowid=adr;
 COMMIT;
 
EXCEPTION
 
  WHEN GestionException.ExcAnneeNaiss 
            THEN GestionException.Declencher (GestionException.ConstAnneeNaiss);
 
  WHEN GestionException.ExcSexeFalse 
            THEN GestionException.Declencher (GestionException.ConstSexe);
 
  WHEN INVALID_NUMBER THEN RAISE_APPLICATION_ERROR(-20015, 'Le numero entré est invalide');
 
  WHEN VALUE_ERROR THEN RAISE_APPLICATION_ERROR(-20016, 'La valeur entrée est invalide');
 
  WHEN OTHERS then GestionException.Declencher (GestionException.ConstIndetermine);
 
 
END Modifier;