Académique Documents
Professionnel Documents
Culture Documents
TP2 - Trigger
TP2 - Trigger
Begimay KONUSHBAEVA
Camille CABROL
1.
A. Il faut surveiller les tables LesGardiens et LesHistoiresAff.
B. Il faut récupérer les valeurs modifées ou supprimées afin de les insérer dans la table
LesHistoiresAff.
C.
Test:
UPDATE LesGardiens
SET noCage = 3
WHERE noCage = 11 AND nomE = ‘Caffiau’;
DELETE FROM LesGardiens
WHERE noCage = 3 AND nomE = ‘Caffiau’;
Le but est de retrouver dans la table LesHistoiresAff les anciennes valeurs avant modifications
faites précédemment.
D.
CREATE TRIGGER lesGardiens_histoiresAff
AFTER UPDATE OR DELETE ON LesGardiens
FOR EACH ROW
BEGIN
INSERT INTO LesHistoiresAff
VALUES (CURRENT_DATE, :OLD.noCage, :OLD.nomE);
END;
/
2.
A. Il faut surveiller les tables Il faut surveiller les tables LesMaladies et LesAnimaux.
B. A chaque fois qu’un ajout ou une suppression de maladie est effectuée dans la table
LesMaladies, il faut recalculer le nombre de maladies présent dans la tables LesAnimaux.
C. Test possibles :
- Ajout d’un tuple dans la table LesMaladies
- Suppression d’un tuple dans la table LesMaladies
D.
CREATE TRIGGER maladies_animaux
AFTER INSERT OR DELETE ON LesMaladies
FOR EACH ROW
BEGIN
IF (:NEW.nomA IS NOT NULL AND :NEW.nomM IS NOT NULL)
THEN
UPDATE LesAnimaux
SET nb_maladies = nb_maladies+1
WHERE nomA = :NEW.nomA;
END IF;
IF (:OLD.nomA IS NOT NULL AND :OLD.nomM IS NOT NULL)
THEN
UPDATE LesAnimaux
SET nb_maladies = nb_maladies-1
WHERE nomA = :OLD.nomA;
END IF;
END;
/
3.
A. Les tables à surveiller sont les tables LesGardiens et LesResponsables.
4.
A. Les tables à surveiller sont LesAnimaux et LesGardiens.
B. La condition à évaluer
- noCage de tout tuple de la Table LesAnimaux doit exister dans la table LesGardiens
C.
D.
CREATE TRIGGER animaux_gardiens
BEFORE INSERT OR UPDATE ON LesAnimaux
FOR EACH ROW
DECLARE nbCage integer;
BEGIN
SELECT COUNT(*) INTO nbCage FROM LesGardiens g
WHERE g.noCage=:NEW.noCage;
IF (nbCage < 1)
THEN raise_application_error(-20200, 'La cage n est pas gardée');
END IF;
END;
/
5.
A. Les tables à surveiller sont les tables LesGardiens et LesAnimaux.
B. La condition à évaluer :
- le nombre de gardiens gardant une cage ne doit pas être inférieur à 1
C. Les test possibles :
Supprimer un tuple (noCage, nomE) où la cage n’est gardée que par un seul employé
(vu que les deux attributs de cette table forment la clé primaire de cette table il n’est pas
possible de modifier un tuple)
D.
CREATE TRIGGER surveillance
AFTER DELETE ON LesGardiens
DECLARE nbAnomalies number;
BEGIN
SELECT COUNT(COUNT(noCage)) INTO nbAnomalies FROM LesCages
GROUP BY noCage
HAVING( noCage NOT IN (
SELECT noCage FROM LesGardiens));
F nbAnomalies>=1 THEN raise_application_error(-20200, 'Anomalie detecte : une cage n est gardé
par aucun gardien');
END IF;
END;
/
Test:
6.
A. Les tables à surveiller sont LesGardiens et les LesAnimaux
B. La condition à évaluer :
- Le nombre des tuples (noCage, nomE) dans la table LesGardiens ne doit pas être
supérieur à 1 si un tuple avec ce noCage n’existe pas dans la table LesAnimaux
C. Les tests possibles :
- Ajouter un gardien à une cage vide dèjà gardée par un autre gardien
D. Trigger:
CREATE TRIGGER cage_vide
AFTER UPDATE ON LesGardiens
DECLARE nbAnomalies NUMBER;
BEGIN
SELECT COUNT(COUNT(nomE)) INTO nbAnomalies
FROM LesGardiens
GROUP BY noCage
HAVING noCage NOT IN
(SELECT noCage
FROM LesAnimaux) and COUNT(nomE)>1;
IF nbAnomalies >=1
THEN raise_application_error(-20200, 'La cage est vide est a deja 1 gardien');
END IF;
END;
/
Test :
insert into LesGardiens values(4,'Magi');
ERROR at line 1:
ORA-20200: La cage est vide est a deja 1 gardien