Vous êtes sur la page 1sur 4

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.

B. Il faut faire 2 triggers :


- il faut qu’à chaque fois qu’on souhaite ajouter un gardien, vérifier qu’il n’existe pas déjà dans la
table LesResponsables.
- il faut qu’à chaque fois qu’on souhaite ajouter un responsable, vérifier qu’il n’existe pas déjà dans
la table LesGardiens.

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.

Les tests possible :


- Ajout d’un tuple dans la table LesAnimaux avec un noCage non présent dans la table
LesGardiens
- Suppression de tuple dans la table LesGardiens avec u

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:

DELETE FROM LesGardiens WHERE noCage='4'


*
ERROR at line 1:
ORA-20200: Anomalie detecte : une cage n est gard?? par aucun gardien

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

Vous aimerez peut-être aussi