Académique Documents
Professionnel Documents
Culture Documents
Département d’Informatique
DE DONNÉES
RESPONSABLE
DR K. BOUKHALFA
CONTRAINTES D’INTÉGRITÉ
&
TRIGGERS
1
07/04/2014
CONTRAINTES D’INTÉGRITÉ
Les données de la base doivent rester conformes à la réalité qu’elle
représente
Deux types
CONTRAINTES STATIQUES
Unicité de la clé
CI individuelles
L’instruction ASSERT
2
07/04/2014
CONTRAINTES INTRA-RELATIONS
Verticale
Contrôler la valeur d’un constituant d’un n-uplet en fonction
des valeurs de ce constituant pour les autres n-uplets.
Horizontale
Contrôler la valeur d’un constituant en fonction des valeurs
apparaissant dans les autres constituants
Exemple : Employé(Nom, Salaire, Nom-Rayon)
« Un employé ne peut gagner plus du double de la moyenne des salaires
de son rayon »
ASSERT CI2 ON Employé E :
Salaire ≤ 2 * (SELECT AVG (Salaire)
FROM Employé
WHERE Nom-Rayon = E.Nom-Rayon);
EXEMPLE SQL
La contrainte suivante spécifie que le salaire d’un employé ne doit pas
travaille.
3
07/04/2014
CONTRAINTES INTER-RELATIONS
FROM Employé)
IS IN (SELECT Nom-Rayon
FROM Rayon);
CONTRAINTES D’INTÉGRITÉ
DYNAMIQUES
Contrôler le passage d’un état à un autre.
l’ancien
4
07/04/2014
LES TRIGGERS
Trigger = action spontanée
Exemple
ON INSERTION OF Employé
(UPDATE RAYON
CRÉATION DE TRIGGERS
WHEN (new.empno>0)
BEGIN ............
END;
5
07/04/2014
LE NOM DU TRIGGER
Option BEFORE/AFTER
DÉFINITION DU TRIGGER
le trigger :
trois.
6
07/04/2014
TYPES DE TRIGGERS
Le type d’un trigger détermine :
Si l'option FOR EACH ROW est spécifiée, c'est un trigger ligne, sinon
c'est un trigger global.
TRIGGERS LIGNES
trigger.
7
07/04/2014
CORPS DU TRIGGER
8
07/04/2014
NOMS DE CORRÉLATION
BEFORE.
L'OPTION REFERENCING
Si une table s'appelle NEW ou OLD, on peut utiliser REFERENCING pour
Exemple
:newnew.colon1:= TO_CHAR(:newnew.colon2);
END;
9
07/04/2014
UPDATE), on peut utiliser des prédicats conditionnels (INSERTING, DELETING et UPDATING) pour exécuter
Exemple
.......
BEGIN ......
END;
OPTION UPDATING
employe .......
BEGIN ......
END IF;
...... END;
10
07/04/2014
instruction SQL.
Triggers en cascade
donné.
11
07/04/2014
Modification de triggers
On peut désactiver tous les triggers associés à une table avec la commande :
ALTER TRIGGER nomtrigger ENABLE; ou tous les triggers associés à une table :
12
07/04/2014
RECHERCHE D’INFORMATION
SUR LES TRIGGERS
USER_TRIGGERS
ALL_TRIGGERS
DBA_TRIGGERS
GESTION D'EXCEPTIONS
Si une erreur se produit pendant l'exécution d'un trigger,
toutes les mises à jour produites par le trigger ainsi que par
l'instruction qui l'a déclenché sont défaites.
13
07/04/2014
EXCEPTIONS PRÉDÉFINIES -
QUELQUES EXEMPLES
QUELQUES EXEMPLES
employe(numserv,....) service(numserv,...)
BEGIN noserv:=0;
IF (noserv=0)
THEN raise_application_error(-20501, 'N° de service non correct');
END IF;
END;
14
07/04/2014
EXEMPLES
Employe (salaire,....)
BEGIN
FROM employe;
END;
EXEMPLES
employe(numemp,salaire,grade,...)
grille(grade,salmin,salmax)
/* s'assurer que le salaire est compris dans les bornes correspondant au grade de l'employé */
15
07/04/2014
CONSEILS
Utiliser des triggers pour garantir que, lorsqu'une opération spécifique est
N'utiliser les triggers que pour les opérations globales, centralisées qui
N'utiliser des triggers que s'il n'y a pas d'autre possibilité intégrée dans
par exemple, un trigger AFTER UPDATE sur une table qui ferait un UPDATE sur
la même table.
16