Bases de Données / Databases

Site Web de l'équipe BD du LIP6 / LIP6 DB Web Site

Outils pour utilisateurs

Outils du site


site:enseignement:licence:3i009:tme_triggers

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
site:enseignement:licence:3i009:tme_triggers [09/12/2025 12:27] amannsite:enseignement:licence:3i009:tme_triggers [09/12/2025 12:30] (Version actuelle) amann
Ligne 32: Ligne 32:
  
 On utilise l’opérateur '':='' pour affecter une valeur à une variable, lors de sa déclaration ou dans une instruction de la section BEGIN. On peut donc y introduire tous les éléments du langage PL/SQL, et notamment des variables, déclarées dans une section ''DECLARE'', juste avant la section ''BEGIN…END''. On utilise l’opérateur '':='' pour affecter une valeur à une variable, lors de sa déclaration ou dans une instruction de la section BEGIN. On peut donc y introduire tous les éléments du langage PL/SQL, et notamment des variables, déclarées dans une section ''DECLARE'', juste avant la section ''BEGIN…END''.
 +<br/>
 Instructions PL/SQL : Instructions PL/SQL :
 +<br/>
 Une expression SQL est une instruction PL/SQL. Par exemple, on peut utiliser l'ordre UPDATE pour modifier la base de données. On suppose que chaque requête SQL retourne au maximum un nuplet. La valeur de cet nuplet peut être copiée dans des variables déclarées dans la section DECLARE. Par exemple : Une expression SQL est une instruction PL/SQL. Par exemple, on peut utiliser l'ordre UPDATE pour modifier la base de données. On suppose que chaque requête SQL retourne au maximum un nuplet. La valeur de cet nuplet peut être copiée dans des variables déclarées dans la section DECLARE. Par exemple :
  
Ligne 60: Ligne 60:
 On ne peut pas annuler une transaction à l'intérieur d'un trigger mais on peut déclencher une exception en utilisant la fonction RAISE_APPLICATION_ERROR (qui peut ensuite être traitée par la procédure qui a déclenché le trigger) : On ne peut pas annuler une transaction à l'intérieur d'un trigger mais on peut déclencher une exception en utilisant la fonction RAISE_APPLICATION_ERROR (qui peut ensuite être traitée par la procédure qui a déclenché le trigger) :
  
-<code plsql>+<code plsql>entre
 RAISE_APPLICATION_ERROR(code,'message') ; RAISE_APPLICATION_ERROR(code,'message') ;
 </code> </code>
Ligne 117: Ligne 117:
   - Créez un trigger qui empêche que le nombre de groupes par UE dépasse 4.   - Créez un trigger qui empêche que le nombre de groupes par UE dépasse 4.
   - Créez un trigger qui empêche le nombre d'étudiants dans chaque groupe de dépasser  32.   - Créez un trigger qui empêche le nombre d'étudiants dans chaque groupe de dépasser  32.
-  - Pour empêcher un étudiant de s’inscrire à des TD incompatibles (i.e. ayant lieu en même temps),  on introduit une nouvelle contrainte d’intégrité dans la base : un étudiant ne peut pas avoir deux inscriptions qui lui imposent d’être, au même moment, à deux endroits différents. <br/>Ecrire un trigger qui assure cette contrainte, de la façon suivante : +  - Pour empêcher un étudiant de s’inscrire à des TD incompatibles (i.e. ayant lieu en même temps),  on introduit une nouvelle contrainte d’intégrité dans la base : un étudiant ne peut pas avoir deux inscriptions qui lui imposent d’être, au même moment, à deux endroits différents.  
-    en préambule à chaque inscription, le trigger inscrit le numéro de l’étudiant, avec le jour, l’heure et la salle du TD qu’il a choisi, dans une table supplémentaire LOCETUD  et une contrainte d’intégrité qui assure l’unicité du triplet (NoETUDIANT, JOUR, HEURE):+ 
 +Ecrire un trigger qui assure cette contrainte, de la façon suivante : 
 +  en préambule à chaque inscription, le trigger inscrit le numéro de l’étudiant, avec le jour, l’heure et la salle du TD qu’il a choisi, dans une table supplémentaire LOCETUD  et une contrainte d’intégrité qui assure l’unicité du triplet (NoETUDIANT, JOUR, HEURE):
 <code sql> <code sql>
 CREATE TABLE LOCETUD (  CREATE TABLE LOCETUD ( 
Ligne 127: Ligne 129:
     PRIMARY KEY ( NoEtud, Jour, Heure ));     PRIMARY KEY ( NoEtud, Jour, Heure ));
 </code>   </code>  
-    - si l’étudiant a déjà pris une inscription correspondant au même jour et à la même heure, la contrainte de table précédente provoque le rejet du nouveau quadruplet  (NoETUDIANT, JOUR, HEURE, SALLE), le trigger est arrêté sur erreur, et l’instruction d’insertion d’un nouvel élément dans la table INSCRIPTION est, par suite, arrêtée sur erreur. +  * si l’étudiant a déjà pris une inscription correspondant au même jour et à la même heure, la contrainte de table précédente provoque le rejet du nouveau quadruplet  (NoETUDIANT, JOUR, HEURE, SALLE), le trigger est arrêté sur erreur, et l’instruction d’insertion d’un nouvel élément dans la table INSCRIPTION est, par suite, arrêtée sur erreur. 
  
        
  
site/enseignement/licence/3i009/tme_triggers.1765279656.txt.gz · Dernière modification : de amann