SlideShare une entreprise Scribd logo
1  sur  13
Ministère de l’Enseignement Supérieur et de recherche
scientifique
Université de Sousse
Chapitre6 :
Les déclencheurs (Triggers)
2022-2023
Un trigger (déclencheur) est un programme qui se déclenche automatiquement suite
à un événement de mise à jour.
Les triggers peuvent servir à :
 vérifier des contraintes que l'on ne peut pas définir de façon déclarative
I. Introduction
2
 gérer de la redondance d'information, après une dénormalisation du schéma
collecter des informations sur les mises-à-jour de la base.
3
II. Création d'un Trigger : Syntaxe
CREATE [OR REPLACE] TRIGGER nom_trig
BEFORE|AFTER
INSERT|DELETE|UPDATE ON nom_table
[ FOR EACH ROW]
[ WHEN condition]
-- Bloc PL/SQL contenant le corps du trigger
Syntaxe :
After ou Before : détermine le moment où le trigger va se déclencher par rapport à
l'instruction DML (avant ou après)
Si le trigger doit déterminer si l'instruction DML est autorisée, utiliser BEFORE
Si le trigger doit "fabriquer" la valeur d'une colonne pour pouvoir ensuite la
mettre dans la table : utiliser BEFORE
Si on a besoin que l'instruction DML soit terminée pour exécuter le corps du
trigger : utiliser AFTER
4
Si cette clause est absente, alors le trigger va se déclencher une seule fois pour toute
l'instruction. On parle alors de trigger instruction.
Indique que le trigger doit s'exécuterr pour chaque ligne modifiée/insérée ou
supprimée. On parle alors de trigger ligne.
Dans un trigger ligne, on peut faire référence à la ligne courante, celle pour laquelle
le trigger s'exécute.
Pour cette ligne, on a accès à la valeur avant l'instruction DML (nommée :old) et à
la valeur après l'instruction (nommée :new).
:old :new
Insert NULL ligne insérée
Delete ligne supprimée NULL
Update ligne avant modif ligne après modif
III. La clause For each row
 CREATE TABLE EMP_LOG (
 emp_id integer NOT NULL,
 date_evt date,
 msg VARCHAR(50));
5
6
définit une condition pour un trigger ligne : le trigger se déclenchera pour chaque ligne
vérifiant la condition.
Exemple 1: Le trigger suivant insère une ligne dans une table de log, lorsque le salaire
d'un employé diminue.
CREATE or REPLACE TRIGGER journal_emp
AFTER update of sal on EMP
FOR EACH ROW
WHEN(new.sal < old.sal)
-- attention, ici on utilise new et pas :new
BEGIN
insert into EMP_LOG(emp_id, date_evt, msg)
values (:new.empno, sysdate, 'salaire diminué');
END;
III. La Clause When
7
Exemple 2: soit la table étudiant suivante
CREATE TRIGGER moyenneMax
AFTER UPDATE ON etudiant
FOR EACH ROW
WHEN :NEW.moyenne> 2*:OLD.moyenne
BEGIN
INSERT INTO alerte(datealerte, numEtudiant, message)
VALUES ( SYSDATE, :OLD.nom, 'MOYENNE a plus que double');
END;
Le trigger suivant permet de………………………………………………….
………………………………………………………………………………………
………………………………………………………………………………………
III. La Clause When
8
Le bloc d’instructions PL/SQL peut contenir :
IV. Le corps du trigger
 IF INSERTING THEN bloc d’instructions pl/sql END IF
 IF UPDATING THEN bloc d’instructions pl/sql END IF
 IF DELETING THEN bloc d’instructions pl/sql END IF
Quand des événements (INSERT, UPDATE ou DELETE) sont regroupés ensemble
au sein d’un même déclencheur, on peut les manipuler par :
Instructions SQL
 SELECT, INSERT, UPDATE, DELETE à l’exception de COMMIT et ROLLBACK
 IF condition THEN instructions pl/sql ELSE instructions pl/sql END IF;
 LOOP instructions pl/sql EXIT WHEN (condition) END LOOP;
 WHILE condition LOOP instructions pl/sql END LOOP;
 FOR variable IN start..stop LOOP instructions pl/sql END LOOP;
Instructions de contrôle de flux
9
Exemple 3:
III. La Clause When
10
Le bloc d’instructions PL/SQL peut contenir :
IV. Le corps du trigger
 Curseurs
 Procédures et fonctions
 Gestion des exceptions
Génération des exceptions
 raise_application_error(nombre,message)
Autres possibilités plus avancées
11
Exemple
IV. Le corps du trigger
La table Salgrade qui définit les salaires minimal et maximal de chaque grade d'employé.
EMP(EMPNO, ENAME, JOB, GRADE, MGR, SAL, COMM, DEPTNO#)
DEPT(DEPTNO, DNAME, LOC)
PROJET(CodeP, NomP)
PARTICIPATION(EMPNO#, CodeP#, Fonction)
SALGRADE(GRADE, lonsal , hisal)
Définir un trigger pour vérifier, avant une insertion ou modification de salaire dans la
table EMP, que le nouveau salaire soit valide (c-a-d ne soit pas inferieur à minsal et ne
soit pas supérieur à maxsal) .
Il faut traiter les cas de non validité de salaire dans une exception en affichant un
message disant que le salaire est hors rang.
Il faut aussi traiter le cas où le grade à insérer n'existe pas dans la table SALGRADE.
12
CREATE TRIGGER sal_check
BEFORE INSERT OR UPDATE OF sal ON emp
FOR EACH ROW
DECLARE
minsal NUMBER;
maxsal NUMBER;
sal_hors_rang EXCEPTION;
BEGIN
SELECT losal, hisal INTO minsal, maxsal FROM salgrade
WHERE grade= :new.grade;
IF (:new.sal < minsal OR :new.sal > maxsal) THEN
RAISE sal_hors_rang;
END IF;
EXCEPTION
WHEN sal_hors_rang THEN
DBMS_OUTPUT.PUT_LINE('Salaire' || TO_CHAR (:new.sal) || ' hors rang');
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE( 'Igrade nvalide ');
END;
13
II. Trigger : création
Activation / désactivation d'un seul déclencheur
 Alter Trigger nom_declencheur Disable | Enable;
Drop TRIGGER nom_declancheur;
Activation / désactivation de tous les déclencheurs associés à une table
 Alter Table nom_table Disable | Enable ALL TRIGGERS;
Suppression d'un déclencheur

Contenu connexe

Tendances

diagramme des cas d'utilisation
diagramme des cas d'utilisationdiagramme des cas d'utilisation
diagramme des cas d'utilisationAmir Souissi
 
Implémentation de la QoS au sein d'un IP/MPLS - Présentation
Implémentation de la QoS au sein d'un IP/MPLS - PrésentationImplémentation de la QoS au sein d'un IP/MPLS - Présentation
Implémentation de la QoS au sein d'un IP/MPLS - PrésentationRihab Chebbah
 
Cours : les listes chainées Prof. KHALIFA MANSOURI
Cours : les listes chainées  Prof. KHALIFA MANSOURI Cours : les listes chainées  Prof. KHALIFA MANSOURI
Cours : les listes chainées Prof. KHALIFA MANSOURI Mansouri Khalifa
 
Methodes d'accès dans les réseaux locaux
Methodes d'accès dans les réseaux locauxMethodes d'accès dans les réseaux locaux
Methodes d'accès dans les réseaux locauxInes Kechiche
 
Dba oracle-v1
Dba oracle-v1Dba oracle-v1
Dba oracle-v1infcom
 
1- Les bases de la sécurité informatique.pdf
1- Les bases de la sécurité informatique.pdf1- Les bases de la sécurité informatique.pdf
1- Les bases de la sécurité informatique.pdfbadrboutouja1
 
Chp1 - Introduction à l'Informatique Décisionnelle
Chp1 - Introduction à l'Informatique DécisionnelleChp1 - Introduction à l'Informatique Décisionnelle
Chp1 - Introduction à l'Informatique DécisionnelleLilia Sfaxi
 
Les listes simplement chaînées en langage C
Les listes simplement chaînées en langage CLes listes simplement chaînées en langage C
Les listes simplement chaînées en langage CMohamed Lahby
 
Cours08 exceptions
Cours08 exceptionsCours08 exceptions
Cours08 exceptionsIssam Talkam
 
TD2 - UML - Correction
TD2 - UML - CorrectionTD2 - UML - Correction
TD2 - UML - CorrectionLilia Sfaxi
 
Bases de données réparties par la pratique
Bases de données réparties par la pratiqueBases de données réparties par la pratique
Bases de données réparties par la pratiqueAbdelouahed Abdou
 
Big data : quels enjeux et opportunités pour l'entreprise - livre blanc - Blu...
Big data : quels enjeux et opportunités pour l'entreprise - livre blanc - Blu...Big data : quels enjeux et opportunités pour l'entreprise - livre blanc - Blu...
Big data : quels enjeux et opportunités pour l'entreprise - livre blanc - Blu...Romain Fonnier
 
Chp5 - Diagramme d'Etat Transition
Chp5 - Diagramme d'Etat TransitionChp5 - Diagramme d'Etat Transition
Chp5 - Diagramme d'Etat TransitionLilia Sfaxi
 
Base de donnees Avancees et Intro à NoSQL.ppt
Base de donnees Avancees et Intro à  NoSQL.pptBase de donnees Avancees et Intro à  NoSQL.ppt
Base de donnees Avancees et Intro à NoSQL.pptIdriss22
 

Tendances (20)

diagramme des cas d'utilisation
diagramme des cas d'utilisationdiagramme des cas d'utilisation
diagramme des cas d'utilisation
 
Chapitre 2 hadoop
Chapitre 2 hadoopChapitre 2 hadoop
Chapitre 2 hadoop
 
Implémentation de la QoS au sein d'un IP/MPLS - Présentation
Implémentation de la QoS au sein d'un IP/MPLS - PrésentationImplémentation de la QoS au sein d'un IP/MPLS - Présentation
Implémentation de la QoS au sein d'un IP/MPLS - Présentation
 
These
TheseThese
These
 
Cours : les listes chainées Prof. KHALIFA MANSOURI
Cours : les listes chainées  Prof. KHALIFA MANSOURI Cours : les listes chainées  Prof. KHALIFA MANSOURI
Cours : les listes chainées Prof. KHALIFA MANSOURI
 
Methodes d'accès dans les réseaux locaux
Methodes d'accès dans les réseaux locauxMethodes d'accès dans les réseaux locaux
Methodes d'accès dans les réseaux locaux
 
Rapportpfe
RapportpfeRapportpfe
Rapportpfe
 
Dba oracle-v1
Dba oracle-v1Dba oracle-v1
Dba oracle-v1
 
1- Les bases de la sécurité informatique.pdf
1- Les bases de la sécurité informatique.pdf1- Les bases de la sécurité informatique.pdf
1- Les bases de la sécurité informatique.pdf
 
Chp1 - Introduction à l'Informatique Décisionnelle
Chp1 - Introduction à l'Informatique DécisionnelleChp1 - Introduction à l'Informatique Décisionnelle
Chp1 - Introduction à l'Informatique Décisionnelle
 
Les listes simplement chaînées en langage C
Les listes simplement chaînées en langage CLes listes simplement chaînées en langage C
Les listes simplement chaînées en langage C
 
Presentation sql
Presentation sqlPresentation sql
Presentation sql
 
Cours08 exceptions
Cours08 exceptionsCours08 exceptions
Cours08 exceptions
 
TD2 - UML - Correction
TD2 - UML - CorrectionTD2 - UML - Correction
TD2 - UML - Correction
 
Bases de données réparties par la pratique
Bases de données réparties par la pratiqueBases de données réparties par la pratique
Bases de données réparties par la pratique
 
Le langage sql
Le langage sqlLe langage sql
Le langage sql
 
Big data : quels enjeux et opportunités pour l'entreprise - livre blanc - Blu...
Big data : quels enjeux et opportunités pour l'entreprise - livre blanc - Blu...Big data : quels enjeux et opportunités pour l'entreprise - livre blanc - Blu...
Big data : quels enjeux et opportunités pour l'entreprise - livre blanc - Blu...
 
Chp5 - Diagramme d'Etat Transition
Chp5 - Diagramme d'Etat TransitionChp5 - Diagramme d'Etat Transition
Chp5 - Diagramme d'Etat Transition
 
Base de donnees Avancees et Intro à NoSQL.ppt
Base de donnees Avancees et Intro à  NoSQL.pptBase de donnees Avancees et Intro à  NoSQL.ppt
Base de donnees Avancees et Intro à NoSQL.ppt
 
PL/SQL:les curseurs
PL/SQL:les curseursPL/SQL:les curseurs
PL/SQL:les curseurs
 

Similaire à chp-6-Les-triggers (1).pptx

ORACLE 12C PLSQL Gestion des Triggers.ppt
ORACLE 12C PLSQL Gestion des Triggers.pptORACLE 12C PLSQL Gestion des Triggers.ppt
ORACLE 12C PLSQL Gestion des Triggers.pptAhmathBambaMBACKE
 
Pl/sql - interaction avec la base de données & structures de contrôle
Pl/sql  - interaction avec la base de données & structures de contrôlePl/sql  - interaction avec la base de données & structures de contrôle
Pl/sql - interaction avec la base de données & structures de contrôleAbdelouahed Abdou
 
Plpython et Triggers
Plpython et TriggersPlpython et Triggers
Plpython et TriggersAffinitic
 
PL/Sql et Sécurité des bases de données
PL/Sql et Sécurité des bases de donnéesPL/Sql et Sécurité des bases de données
PL/Sql et Sécurité des bases de donnéessmiste
 
SQL Oracle | Regrouper les Données avec les Fonctions de Groupe
SQL Oracle | Regrouper les Données avec les Fonctions de GroupeSQL Oracle | Regrouper les Données avec les Fonctions de Groupe
SQL Oracle | Regrouper les Données avec les Fonctions de Groupewebreaker
 
Manipulation des Données , cours sql oracle
Manipulation des Données , cours sql oracleManipulation des Données , cours sql oracle
Manipulation des Données , cours sql oraclewebreaker
 
System c eniso_jan_fev_07
System c eniso_jan_fev_07System c eniso_jan_fev_07
System c eniso_jan_fev_07haythem_2015
 
Algorithme & structures de données Chap II
Algorithme & structures de données Chap IIAlgorithme & structures de données Chap II
Algorithme & structures de données Chap IIInes Ouaz
 
Les bases de la programmation en JAVA
Les bases de la programmation  en JAVA   Les bases de la programmation  en JAVA
Les bases de la programmation en JAVA Asmaa BENGUEDDACH
 
Les Contraintes | SQL Oracle
Les Contraintes | SQL OracleLes Contraintes | SQL Oracle
Les Contraintes | SQL Oraclewebreaker
 
Plsql triggers
Plsql triggersPlsql triggers
Plsql triggersAz Za
 
Fonctions Mono-Ligne
Fonctions Mono-LigneFonctions Mono-Ligne
Fonctions Mono-Lignewebreaker
 
Plsql
PlsqlPlsql
PlsqlAz Za
 

Similaire à chp-6-Les-triggers (1).pptx (20)

ORACLE 12C PLSQL Gestion des Triggers.ppt
ORACLE 12C PLSQL Gestion des Triggers.pptORACLE 12C PLSQL Gestion des Triggers.ppt
ORACLE 12C PLSQL Gestion des Triggers.ppt
 
Pl/sql - interaction avec la base de données & structures de contrôle
Pl/sql  - interaction avec la base de données & structures de contrôlePl/sql  - interaction avec la base de données & structures de contrôle
Pl/sql - interaction avec la base de données & structures de contrôle
 
Plpython et Triggers
Plpython et TriggersPlpython et Triggers
Plpython et Triggers
 
PL/Sql et Sécurité des bases de données
PL/Sql et Sécurité des bases de donnéesPL/Sql et Sécurité des bases de données
PL/Sql et Sécurité des bases de données
 
cours Plsql _ abdelkhalek benhoumine
cours Plsql _ abdelkhalek benhouminecours Plsql _ abdelkhalek benhoumine
cours Plsql _ abdelkhalek benhoumine
 
SQL Oracle | Regrouper les Données avec les Fonctions de Groupe
SQL Oracle | Regrouper les Données avec les Fonctions de GroupeSQL Oracle | Regrouper les Données avec les Fonctions de Groupe
SQL Oracle | Regrouper les Données avec les Fonctions de Groupe
 
Tp 1 introduction à matlab
Tp 1 introduction à matlabTp 1 introduction à matlab
Tp 1 introduction à matlab
 
Tp 1 introduction à matlab
Tp 1 introduction à matlabTp 1 introduction à matlab
Tp 1 introduction à matlab
 
Manipulation des Données , cours sql oracle
Manipulation des Données , cours sql oracleManipulation des Données , cours sql oracle
Manipulation des Données , cours sql oracle
 
System c eniso_jan_fev_07
System c eniso_jan_fev_07System c eniso_jan_fev_07
System c eniso_jan_fev_07
 
Algorithme & structures de données Chap II
Algorithme & structures de données Chap IIAlgorithme & structures de données Chap II
Algorithme & structures de données Chap II
 
trigger.pdf
trigger.pdftrigger.pdf
trigger.pdf
 
trigger.pptx
trigger.pptxtrigger.pptx
trigger.pptx
 
Les bases de la programmation en JAVA
Les bases de la programmation  en JAVA   Les bases de la programmation  en JAVA
Les bases de la programmation en JAVA
 
Les Contraintes | SQL Oracle
Les Contraintes | SQL OracleLes Contraintes | SQL Oracle
Les Contraintes | SQL Oracle
 
Plsql triggers
Plsql triggersPlsql triggers
Plsql triggers
 
Fonctions Mono-Ligne
Fonctions Mono-LigneFonctions Mono-Ligne
Fonctions Mono-Ligne
 
oracle : le PL-SQL
oracle : le PL-SQLoracle : le PL-SQL
oracle : le PL-SQL
 
Plsql
PlsqlPlsql
Plsql
 
Atelier2
Atelier2Atelier2
Atelier2
 

chp-6-Les-triggers (1).pptx

  • 1. Ministère de l’Enseignement Supérieur et de recherche scientifique Université de Sousse Chapitre6 : Les déclencheurs (Triggers) 2022-2023
  • 2. Un trigger (déclencheur) est un programme qui se déclenche automatiquement suite à un événement de mise à jour. Les triggers peuvent servir à :  vérifier des contraintes que l'on ne peut pas définir de façon déclarative I. Introduction 2  gérer de la redondance d'information, après une dénormalisation du schéma collecter des informations sur les mises-à-jour de la base.
  • 3. 3 II. Création d'un Trigger : Syntaxe CREATE [OR REPLACE] TRIGGER nom_trig BEFORE|AFTER INSERT|DELETE|UPDATE ON nom_table [ FOR EACH ROW] [ WHEN condition] -- Bloc PL/SQL contenant le corps du trigger Syntaxe : After ou Before : détermine le moment où le trigger va se déclencher par rapport à l'instruction DML (avant ou après) Si le trigger doit déterminer si l'instruction DML est autorisée, utiliser BEFORE Si le trigger doit "fabriquer" la valeur d'une colonne pour pouvoir ensuite la mettre dans la table : utiliser BEFORE Si on a besoin que l'instruction DML soit terminée pour exécuter le corps du trigger : utiliser AFTER
  • 4. 4 Si cette clause est absente, alors le trigger va se déclencher une seule fois pour toute l'instruction. On parle alors de trigger instruction. Indique que le trigger doit s'exécuterr pour chaque ligne modifiée/insérée ou supprimée. On parle alors de trigger ligne. Dans un trigger ligne, on peut faire référence à la ligne courante, celle pour laquelle le trigger s'exécute. Pour cette ligne, on a accès à la valeur avant l'instruction DML (nommée :old) et à la valeur après l'instruction (nommée :new). :old :new Insert NULL ligne insérée Delete ligne supprimée NULL Update ligne avant modif ligne après modif III. La clause For each row
  • 5.  CREATE TABLE EMP_LOG (  emp_id integer NOT NULL,  date_evt date,  msg VARCHAR(50)); 5
  • 6. 6 définit une condition pour un trigger ligne : le trigger se déclenchera pour chaque ligne vérifiant la condition. Exemple 1: Le trigger suivant insère une ligne dans une table de log, lorsque le salaire d'un employé diminue. CREATE or REPLACE TRIGGER journal_emp AFTER update of sal on EMP FOR EACH ROW WHEN(new.sal < old.sal) -- attention, ici on utilise new et pas :new BEGIN insert into EMP_LOG(emp_id, date_evt, msg) values (:new.empno, sysdate, 'salaire diminué'); END; III. La Clause When
  • 7. 7 Exemple 2: soit la table étudiant suivante CREATE TRIGGER moyenneMax AFTER UPDATE ON etudiant FOR EACH ROW WHEN :NEW.moyenne> 2*:OLD.moyenne BEGIN INSERT INTO alerte(datealerte, numEtudiant, message) VALUES ( SYSDATE, :OLD.nom, 'MOYENNE a plus que double'); END; Le trigger suivant permet de…………………………………………………. ……………………………………………………………………………………… ……………………………………………………………………………………… III. La Clause When
  • 8. 8 Le bloc d’instructions PL/SQL peut contenir : IV. Le corps du trigger  IF INSERTING THEN bloc d’instructions pl/sql END IF  IF UPDATING THEN bloc d’instructions pl/sql END IF  IF DELETING THEN bloc d’instructions pl/sql END IF Quand des événements (INSERT, UPDATE ou DELETE) sont regroupés ensemble au sein d’un même déclencheur, on peut les manipuler par : Instructions SQL  SELECT, INSERT, UPDATE, DELETE à l’exception de COMMIT et ROLLBACK  IF condition THEN instructions pl/sql ELSE instructions pl/sql END IF;  LOOP instructions pl/sql EXIT WHEN (condition) END LOOP;  WHILE condition LOOP instructions pl/sql END LOOP;  FOR variable IN start..stop LOOP instructions pl/sql END LOOP; Instructions de contrôle de flux
  • 9. 9 Exemple 3: III. La Clause When
  • 10. 10 Le bloc d’instructions PL/SQL peut contenir : IV. Le corps du trigger  Curseurs  Procédures et fonctions  Gestion des exceptions Génération des exceptions  raise_application_error(nombre,message) Autres possibilités plus avancées
  • 11. 11 Exemple IV. Le corps du trigger La table Salgrade qui définit les salaires minimal et maximal de chaque grade d'employé. EMP(EMPNO, ENAME, JOB, GRADE, MGR, SAL, COMM, DEPTNO#) DEPT(DEPTNO, DNAME, LOC) PROJET(CodeP, NomP) PARTICIPATION(EMPNO#, CodeP#, Fonction) SALGRADE(GRADE, lonsal , hisal) Définir un trigger pour vérifier, avant une insertion ou modification de salaire dans la table EMP, que le nouveau salaire soit valide (c-a-d ne soit pas inferieur à minsal et ne soit pas supérieur à maxsal) . Il faut traiter les cas de non validité de salaire dans une exception en affichant un message disant que le salaire est hors rang. Il faut aussi traiter le cas où le grade à insérer n'existe pas dans la table SALGRADE.
  • 12. 12 CREATE TRIGGER sal_check BEFORE INSERT OR UPDATE OF sal ON emp FOR EACH ROW DECLARE minsal NUMBER; maxsal NUMBER; sal_hors_rang EXCEPTION; BEGIN SELECT losal, hisal INTO minsal, maxsal FROM salgrade WHERE grade= :new.grade; IF (:new.sal < minsal OR :new.sal > maxsal) THEN RAISE sal_hors_rang; END IF; EXCEPTION WHEN sal_hors_rang THEN DBMS_OUTPUT.PUT_LINE('Salaire' || TO_CHAR (:new.sal) || ' hors rang'); WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE( 'Igrade nvalide '); END;
  • 13. 13 II. Trigger : création Activation / désactivation d'un seul déclencheur  Alter Trigger nom_declencheur Disable | Enable; Drop TRIGGER nom_declancheur; Activation / désactivation de tous les déclencheurs associés à une table  Alter Table nom_table Disable | Enable ALL TRIGGERS; Suppression d'un déclencheur