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
Prochaine révision
Révision précédente
site:enseignement:licence:3i009:tme_triggers [18/12/2017 09:35] – [Travail à faire] hubertsite:enseignement:licence:3i009:tme_triggers [09/12/2025 12:30] (Version actuelle) amann
Ligne 1: Ligne 1:
 {{indexmenu_n>11}} {{indexmenu_n>11}}
  
-====== TME 10 Triggers ======+====== TME 10-a Triggers ======
 Sous Oracle, le bloc d’instructions d’un trigger est un bloc PL/SQL.  Sous Oracle, le bloc d’instructions d’un trigger est un bloc PL/SQL. 
 Dans ce TME nous allons utiliser un sous-ensemble minimal de PL/SQL pour définir et modifier des variables  Dans ce TME nous allons utiliser un sous-ensemble minimal de PL/SQL pour définir et modifier des variables 
Ligne 23: Ligne 23:
  
  
-**Variables PL/SQL**+**Variables PL/SQL**entre
  
 Les variables utilisées dans un bloc PL/SQL doivent être déclarées dans la section DECLARE de ce bloc.  Les variables utilisées dans un bloc PL/SQL doivent être déclarées dans la section DECLARE de ce bloc. 
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 :
  
 <code sql> <code sql>
-select Jour, Heure, Salle +select Jour, Heure, Salle entre
 into JourI, HeureI, SalleI into JourI, HeureI, SalleI
 from TD                                  from TD                                 
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>
 +
 +Le code doit être dans l'intervalleentre [-20000,-20999].
 +
 +** Limitations : **
 +Un trigger AFTER déchenché après un update (ou un insert) de la table T n'est pas autorisé à modifier la table T (ne pas écrire d'instruction ''update T'' dans le corps du trigger). Pour palier cette limitation, utiliser un trigger BEFORE.
 +
 +
  
 ======= Travail à faire ======= ======= Travail à faire =======
Ligne 84: Ligne 91:
 DROP TABLE INSCRIPTION; DROP TABLE INSCRIPTION;
 CREATE TABLE  INSCRIPTION (   CREATE TABLE  INSCRIPTION (  
- noEtudiant smallint, + noEtud smallint, 
   noTD smallint,    noTD smallint, 
   codeUE varchar(10),   codeUE varchar(10),
- PRIMARY KEY (noEtudiant, codeUE)) ;+ PRIMARY KEY (noEtud, codeUE)) ;
 </code> </code>
  
Ligne 98: Ligne 105:
 On suppose que tous les TDs de toutes les UEs sont synchronisés au niveau des horaires et de la durée  On suppose que tous les TDs de toutes les UEs sont synchronisés au niveau des horaires et de la durée 
 (il n'y a pas de conflit possible entre deux TDs qui ne commencent pas à la même heure et n'ont pas lieu dans la même salle).  (il n'y a pas de conflit possible entre deux TDs qui ne commencent pas à la même heure et n'ont pas lieu dans la même salle). 
-L’enseignant qui assure le TD est identifié par NOENS. Les étudiants s’inscrivent à chaque UE, séparemment, et choisissent un seul TD pour cette UE. +L’enseignant qui assure le TD est identifié par NOENS. Les étudiants s’inscrivent à chaque UE, séparément, et choisissent un seul TD pour cette UE. 
 L'étudiant est identifié par NOETUD. L'étudiant est identifié par NOETUD.
  
Ligne 110: 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.+  - 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. 
  
 Ecrire un trigger qui assure cette contrainte, de la façon suivante : Ecrire un trigger qui assure cette contrainte, de la façon suivante :
site/enseignement/licence/3i009/tme_triggers.1513586119.txt.gz · Dernière modification : de hubert