Advertisement
Advertisement

More Related Content

Advertisement

trigger.pptx

  1. Les Déclencheurs (TRIGGERs) Master II - RISR ... Adminstartion et Sécurité des Systèmes d'Information Répartis (ASSIR) Ministère de l’Enseignement Supérieur et de la Recherche Scientifique Université Dr Tahar Moulay de Saïda Faculté de Technologie Département d’Informatique Master II - Réseaux Informatiques et Systèmes Répartis (RISR) UEF32 - Administration et Sécurité des Systèmes d’Information Répartis (ASSIR)
  2. Master II - RISR ... Adminstartion et Sécurité des Systèmes d'Information Répartis (ASSIR) Définitions • Un trigger (déclencheur) est un programme qui se déclenche automatiquement suite à un événement. • C’est un concept de base de données active et ils existent dans la plupart des SGBDs.
  3. Master II - RISR ... Adminstartion et Sécurité des Systèmes d'Information Répartis (ASSIR) Principes des triggers • basé sur la séquence (ECA) Evénement-Condition-Action Evenement: un trigger est déclenché par un évènement, spécifié par le programmeur, qui est en général une insertion, suppression ou modification sur une table Condition: la première action d’un trigger est de tester une condition : si cette condition ne s’évalue pas à TRUE, l’exécution s’arrête ; Action: peut consister en toute opération sur la base de données : les SGBD fournissent un langage impératif permettant de créer de véritables procédures.
  4. Master II - RISR ... Adminstartion et Sécurité des Systèmes d'Information Répartis (ASSIR) Utilisations des triggers • Pour garantir qu’une propriété est vérifiée – Exemple: – garantir que le nombre d’étudiants inscrits à une unité d’enseignement est toujours inférieur à sa capacité d’accueil. – garantir que le salaire d’un employé est inférieur à celui de son supérieur. • Pour automatiser des traitements lors de certains événements – Exemple: – créer une commande de produit à chaque fois que sa quantité en stock passe en dessous d’un certain seuil. • Pour programmer des contraintes d’intégrités - (Base de données Réparties).
  5. Master II - RISR ... Adminstartion et Sécurité des Systèmes d'Information Répartis (ASSIR) Syntaxe CREATE [OR REPLACE] TRIGGER<nom-trigger> <quand> <évenements> ON <table> [FOR EACH ROW [WHEN <condition>]] BEGIN <action> END; BEFORE ou AFTER (table) ou INSTEAD OF (vue) DELETE, UPDATE ou INSERT séparés par des OR. est une procédure qui peut être implantée, sous Oracle, avec le langage PL/SQL toute condition booléenne SQL est optionnelle
  6. Master II - RISR ... Adminstartion et Sécurité des Systèmes d'Information Répartis (ASSIR) Types de triggers • ORACLE propose deux types de triggers - les triggers lignes qui se déclenchent individuellement pour chaque ligne de la table affectée par le trigger, - les triggers globaux qui sont déclenchées une seule fois. - Si l'option FOR EACH ROW est spécifiée, c'est un trigger ligne, sinon c'est un trigger global. • Pour les triggers lignes, on peut introduire une restriction sur les lignes à l'aide d'une expression logique SQL : c'est la clause WHEN : – Le trigger n'est déclenché sur une ligne que si l'expression WHEN est vérifiée pour cette ligne. – Par exemple, WHEN (new.empno>0) empêchera l'exécution du trigger si la nouvelle valeur de EMPNO est 0, négative ou NULL.
  7. Master II - RISR ... Adminstartion et Sécurité des Systèmes d'Information Répartis (ASSIR) Manipulation de valeur • Deux valeurs sont manipulés – La nouvelle valeur est appelée :new.colonne – L'ancienne valeur est appelée :old.colonne • Exemple : IF :new.salaire < :old.salaire ........ :old :new insert null ligne insérée delete ligne supprimée null update ligne avant modif ligne après modif
  8. Master II - RISR ... Adminstartion et Sécurité des Systèmes d'Information Répartis (ASSIR) Les prédicats conditionnelles • Quand un trigger comporte plusieurs instructions de déclenchement (par exemple INSERT OR DELETE OR UPDATE), on peut utiliser des prédicats conditionnels (INSERTING, DELETING et UPDATING) pour exécuter des blocs de code spécifiques pour chaque instruction de déclenchement. Exemple : CREATE TRIGGER ... BEFORE INSERT OR UPDATE ON employe ....... BEGIN ...... IF INSERTING THEN ....... END IF; IF UPDATING THEN ........ END IF; ...... END;
  9. Master II - RISR ... Adminstartion et Sécurité des Systèmes d'Information Répartis (ASSIR) Activation d’un Trigger • Un trigger peut être activé ou désactivé. Par défaut, un trigger est activé dès sa création. • S’il est désactivé, ORACLE le stocke mais l’ignore. • On peut désactiver un trigger si : • il référence un objet non disponible • on veut charger rapidement un volume de données important ou recharger des données déjà contrôlées. • Pour désactiver un trigger, on utilise l’instruction: ALTER TRIGGER nomtrigger DISABLE; • On peut désactiver tous les triggers associés à une table avec la commande : ALTER TABLE nomtable DISABLE ALL TRIGGERS; • - A l’inverse on peut réactiver un trigger : ALTER TRIGGER nomtrigger ENABLE; • ou tous les triggers associés à une table : ALTER TABLE nomtable ENABLE ALL TRIGGERS;
  10. Master II - RISR ... Adminstartion et Sécurité des Systèmes d'Information Répartis (ASSIR) Références aux valeurs modifiées CREATE TRIGGER MAJ_Log AFTER UPDATE ON Pays FOR EACH ROW WHEN (new.surface <> old.surface) BEGIN INSERT INTO Pays_log (nom, libellé) VALUES (:new.nom, 'surface_changée'); END;
  11. Master II - RISR ... Adminstartion et Sécurité des Systèmes d'Information Répartis (ASSIR) 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. • On peut introduire des exceptions en provoquant des erreurs. • Une exception est une erreur générée dans une procédure PL/SQL. Un bloc PL/SQL peut contenir un bloc EXCEPTION gérant les différentes erreurs possibles avec des clauses WHEN. • Elle peut être prédéfinie ou définie par l'utilisateur. • Une clause WHEN OTHERS THEN; gère le cas des erreurs non prévues.
  12. Master II - RISR ... Adminstartion et Sécurité des Systèmes d'Information Répartis (ASSIR) Exemple d’exceptions prédéfinit • NO_DATA_FOUND – cette exception est générée quand un SELECT INTO ne retourne pas de lignes • DUP_VAL_ON_INDEX – tentative d'insertion d'une ligne avec une valeur déjà existante pour une colonne à index unique • ZERO_DIVIDE – division par zéro
  13. Master II - RISR ... Adminstartion et Sécurité des Systèmes d'Information Répartis (ASSIR) Bloc Exception BEGIN … EXCEPTION WHEN exception1 [OR exception2 …] THEN instructions; [WHEN exception3 [OR exception4 …] THEN instructions; ] [WHEN OTHERS THEN instructions; ] END;
  14. Master II - RISR ... Adminstartion et Sécurité des Systèmes d'Information Répartis (ASSIR) Exception utilisateur Déclaration La déclaration du nom de l’exception doit se trouver dans la section déclarative du bloc PL/SQL. nomException EXCEPTION; Déclenchement - Une exception utilisateur ne sera pas levée de la même manière qu’une exception interne. - Le programme doit explicitement dérouter le traitement vers le bloc des exceptions par la directive RAISE.
  15. Master II - RISR ... Adminstartion et Sécurité des Systèmes d'Information Répartis (ASSIR) Exception utilisateur DECLARE erreur_PK_reparti EXCEPTION; BEGIN … IF condition THEN RAISE erreur_PK_reparti; END IF; EXCEPTION WHEN erreur_PK_reparti THEN ROLLBACK; DBMS_OUTPUT.PUT_LINE ('Désolé, là clé existe déjà!'); WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('Pas de produit de numéro : ‘ || v_nump); WHEN OTHERS THEN ROLLBACK; DBMS_OUTPUT.PUT_LINE('Erreur d''Oracle ' || SQLERRM || '(' || SQLCODE || ')'); END;
  16. Master II - RISR ... Adminstartion et Sécurité des Systèmes d'Information Répartis (ASSIR) Procédure RAISE_APPLICATION ERROR La procédure RAISE_APPLICATION_ERROR permet de définir ses propres messages et codes d’erreurs. - numéroErreur : valeur définie par l'utilisateur pour l'exception, comprise entre –20 000 et –20 999 ; - message : chaîne de caractères (max 2 048 octets) décrivant l’erreur. - TRUE | FALSE : booléen facultatif. TRUE positionne l’erreur dans une pile si plusieurs exceptions doivent être propagées en cascade., FALSE par défaut remplace toutes les erreurs précédentes dans la pile. RAISE_APPLICATION_ERROR(numéroErreur, message [, {TRUE | FALSE}]);
  17. Master II - RISR ... Adminstartion et Sécurité des Systèmes d'Information Répartis (ASSIR) BEGIN …. IF condition THEN RAISE_APPLICATION_ERROR(-20102, ‘Insertion non autorisée!'); END IF; … END; Procédure RAISE_APPLICATION ERROR
  18. Master II - RISR ... Adminstartion et Sécurité des Systèmes d'Information Répartis (ASSIR) BLOC PL/SQL - Les structures de contrôle habituelles d’un langage (IF, WHILE…) ne font pas partie intégrante de la norme SQL. - Le langage PL/SQL (Procedural Langage/Structured Query Langage) est le langage de prédilection d’Oracle Avantages La modularité (un bloc d’instruction peut être composé d’un autre). La portabilité : un programme PL/SQL est indépendant du système d’exploitation qui héberge le serveur Oracle. L’intégration avec les données des tables : on retrouvera avec PL/SQL tous les types de données et instructions disponibles sous SQL.
  19. Master II - RISR ... Adminstartion et Sécurité des Systèmes d'Information Répartis (ASSIR) Structure d’un Bloc PL/SQL DECLARE (section optionnelle) déclare les variables, types, curseurs, exceptions, etc. ; BEGIN (section obligatoire) contient le code PL/SQL incluant ou non des directives SQL (jusqu’à l’instruction END;). Le caractère « / » termine un bloc pour son exécution dans l’interface SQL*Plus. EXCEPTION (section optionnelle) permet de traiter les erreurs retournées par le SGBD à la suite d’exécutions d’instructions SQL.
  20. Master II - RISR ... Adminstartion et Sécurité des Systèmes d'Information Répartis (ASSIR) Structure d’un Bloc PL/SQL
  21. Master II - RISR ... Adminstartion et Sécurité des Systèmes d'Information Répartis (ASSIR) Variables identificateur [CONSTANT] typeDeDonnée [NOT NULL] [:= | DEFAULT expression]; identificateur : lettres , chiffres , $ , _ , # DECLARE v_dateNaissance DATE; /* équivaut à v_dateNaissance DATE:= NULL; */ v_capacite NUMBER(3) := 999; v_telephone CHAR(14) NOT NULL := '06-76-85-14-89'; v_trouve BOOLEAN NOT NULL := TRUE; BEGIN v_capacite := 20; v_dateNaissance := ’21/12/2015’;
  22. Master II - RISR ... Adminstartion et Sécurité des Systèmes d'Information Répartis (ASSIR) Variables La directive %TYPE déclare une variable selon la définition d’une colonne d’une table. Elle permet aussi de déclarer une variable conformément à une autre variable précédemment déclarée. Variables %TYPE •Il faut faire préfixer la directive %TYPE avec le nom de la table et celui de la colonne : identificateur nomTable.nomColonne%TYPE •ou avec le nom d’une variable existante : identificateur2 identificateur1%TYPE. DECLARE v_num etudiant.num_etud%TYPE; v_prime NUMBER(5,2) := 500.50; v_prime_min v_prime %TYPE := v_prime*0.9;
  23. Master II - RISR ... Adminstartion et Sécurité des Systèmes d'Information Répartis (ASSIR) Structures de contrôles IF condition THEN instructions; END IF; IF condition THEN instructions; ELSE instructions; END IF; IF condition1 THEN instructions; ELSIF condition2 THEN instructions; ELSE instructions; END IF;
  24. Master II - RISR ... Adminstartion et Sécurité des Systèmes d'Information Répartis (ASSIR) Extraire des données SELECT liste INTO { nomVariablePLSQL [,nomVariablePLSQL]… | nomRECORD } FROM nomTable …; DECLARE v_nom etudiant.nom_etud%TYPE; BEGIN SELECT nom_etud INTO v_nom FROM etudiant WHERE num_etud=102158; … END;
Advertisement