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; |
Partager