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
|
CREATE OR REPLACE TRIGGER Verif_nb_install
BEFORE INSERT OR UPDATE ON Autoriser
FOR EACH ROW
DECLARE
var_nblicences application.nbdelicences%TYPE;
var_nbinstalls NUMBER(3);
var_nom_appli_1 application.nom%TYPE;
var_nom_appli_2 application.nom%TYPE;
CURSOR CURS_INSTALL IS SELECT A.nom, COUNT(C.cId)
FROM autoriser AU, collaborateur C, profil P, application A
WHERE P.pid=C.pId
AND AU.aId=A.aID
AND AU.pId=P.pId
GROUP BY A.nom ;
CURSOR CURS_NB_LICENCES IS SELECT nom, nbdelicences FROM autoriser, application WHERE autoriser.aid=application.aid ;
BEGIN
OPEN CURS_NB_LICENCES;
OPEN CURS_INSTALL ;
LOOP
FETCH CURS_INSTALL INTO var_nom_appli_1, var_nbinstalls ;
EXIT WHEN CURS_INSTALL%NOTFOUND;
FETCH CURS_NB_LICENCES INTO var_nom_appli_2, var_nblicences;
EXIT WHEN CURS_NB_LICENCES%NOTFOUND;
WHILE( var_nom_appli_1 <> var_nom_appli_2) LOOP
FETCH CURS_NB_LICENCES INTO var_nom_appli_2, var_nblicences;
END LOOP;
IF (var_nblicences < var_nbinstalls)
THEN RAISE_APPLICATION_ERROR(-20000, 'Nombre de licences insuffisant');
END IF;
END LOOP ;
CLOSE CURS_INSTALL;
END; |
Partager