Ils permettent entre autre de contrôler les accès à la base de données. Syntaxe simplifiée pour créer un trigger avec une opération DML

Documents pareils
Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

TP Contraintes - Triggers

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Intégrité des données

Bases de Données relationnelles et leurs systèmes de Gestion

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Administration des bases de données. Jean-Yves Antoine

Notes de cours : bases de données distribuées et repliquées

Intégrité sémantique dans les bases de données relationnelles

Administration des bases de données

Bases de données avancées

Compétences Business Objects

Mysql. Les requêtes préparées Prepared statements

Devoir Data WareHouse

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

Laboratoires de bases de données. Laboratoire n 6. Programmation SQL. par Danièle BAYERS et Louis SWINNEN

Auto-évaluation Oracle: cours de base

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

Partie II Cours 3 (suite) : Sécurité de bases de données

Cours Bases de données 2ème année IUT

SQL Historique

Corrigés détaillés des exercices

Olivier Mondet

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

Le Langage SQL version Oracle

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Bases de Données Avancées PL/SQL

A QUOI SERVENT LES BASES DE DONNÉES?

A QUOI SERVENT LES BASES DE DONNÉES?

Bases de données relationnelles

Introduction au PL/SQL Oracle. Alexandre Meslé

Langage SQL : créer et interroger une base

Gestion des utilisateurs et de leurs droits

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Le Langage De Description De Données(LDD)

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

Le langage SQL (première partie) c Olivier Caron

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW

Historisation des données

Cours Bases de données 2ème année IUT

CREATION WEB DYNAMIQUE

Présentation Windows Azure Hadoop Big Data - BI

PL langage de programmation côté serveur. SQL à la base : types, expressions, requêtes

OpenPaaS Le réseau social d'entreprise

CATALOGUE FORMATIONS DOMAINE Bases de données

Création et Gestion des tables

Les bases de données

Modélisation et Gestion des bases de données avec mysql workbench

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

Introduction au Système de Gestion de Base de Données et aux Base de Données

TP3 : Creation de tables 1 seance

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Les BASES de DONNEES dans WampServer

Bases de Données Réparties

TD : Requêtes SQL (BDR.TD2-1) INSA 3IF

Master Exploration Informatique des données DataWareHouse

Cours SQL. Base du langage SQL et des bases de données

Bases de données et sites WEB

Gestion de base de données

Partie 0 : Gestion des tablespace et des utilisateurs... 3

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

FileMaker 13. Guide de référence SQL

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Bases de données et sites WEB Licence d informatique LI345

Cours 3. Développement d une application BD. DBA - Maîtrise ASR - Université Evry

PHP 5. La base de données MySql. A. Belaïd 1

APIs de table pour SQL Server

Les déclencheurs. Version 1.0. Grégory CASANOVA

La présente publication est protégée par les droits d auteur. Tous droits réservés.

Cours Bases de données 2ème année IUT

Optimisation SQL. Quelques règles de bases

1 Position du problème

16H Cours / 18H TD / 20H TP

Chapitre 5 : Les procédures stockées PL/SQL

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Le langage procédural PL-PGSQL

CHAPITRE 4 POLITIQUES DE CONTRÔLES DES ACCÈS SOUS ORACLE ADMINISTRATION ET TUNING DE BASES DE DONNÉES 10/05/2015 RESPONSABLE DR K.

Administration des bases de données relationnelles Part I

Bases de Données Réparties Concepts et Techniques. Matthieu Exbrayat ULP Strasbourg - Décembre 2007

PHP 4 PARTIE : BASE DE DONNEES

Encryptions, compression et partitionnement des données

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

VTP. LAN Switching and Wireless Chapitre 4

INTEGRITE ET BD ACTIVES

Instructions pour mettre à jour un HFFv2 v1.x.yy v2.0.00

Comment Connecter une Base de Données MySQL via un Driver JDBC Avec OpenOffice.org

BTS/CGO P10 SYSTEME INFORMATION Année

Pour les débutants. langage de définition des données

WEB page builder and server for SCADA applications usable from a WEB navigator

Guide pour l Installation des Disques Durs SATA et Configuration RAID

Cours: Administration d'une Base de Données

Département Génie Informatique

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2)

Transcription:

Les triggers : Définition Les triggers sont des procédures stockées qui s exécutent automatiquement quant un événement se produit. En général cet événement représente une opération DML (Data Manipulation Language ) sur une table. Les instructions DML doivent inclure INSERT, UPDATE ou DELETE Ils permettent entre autre de contrôler les accès à la base de données. Syntaxe simplifiée pour créer un trigger avec une opération DML CREATE [OR REPALCE] TRIGGER nomtrigger BEFORE [ AFTER] INSERT OR UPDATE OR DELETE ON Nomdetable [FOR EACH ROW] [WHEN condition] BLOC PL/SQL Attention: le nom du trigger doit être unique dans la base de données. L option BEFORE /AFTER indique le moment du déclenchement du trigger. Les instructions SQL INSERT OR UPDATE OR DELETE peuvent être toutes présentes comme on peut en avoir juste une. Pour un UPDATE, on peut spécifier une liste de colonnes. Dans ce cas, le trigger ne se déclenchera que s il porte sur l une des colonnes précisées dans la liste.(voir exemple plus loin) Types de TRIGGERS oracle Oracle propose deux types deux types de triggers :. 1. Les triggers lignes qui se déclenchent individuellement pour chaque ligne de la table affectée par le trigger. L option FOR EACH ROW est alors spécifiée

2. Les triggers globaux qui sont déclenchées une seule fois, L option FOR EACH ROW n est pas spécifiée Exemple1 (TRIGGER GLOBAL) CREATE OR REPLACE TRIGGER ctrlmiseajour BEFORE INSERT OR DELETE OR UPDATE ON EMPLOYES DECLARE MESSAGE EXCEPTION; IF (TO_CHAR(SYSDATE,'DY')= 'SAM.' OR TO_CHAR(SYSDATE,'DY')= 'DIM.') THEN RAISE MESSAGE; EXCEPTION WHEN MESSAGE THEN RAISE_APPLICATION_ERROR(-20324, on ne met pas à jour la fin de semaine'); On peut également utiliser les triggers pour contrôler les valeurs qui ont été insérée. L exemple le plus souvent utilisé et l utilisation de trigger pour faire une incrémentation automatique de la clé primaire. Exemple 2TRIGGER SUR CHAQUE LIGNE CREATE OR REPLACETRIGGER EMPINS BEFORE INSERT ON EMPLOYES FOR EACH ROW IF :NEW.NUMEMP IS NULL THEN SELECT SQEMP2.NEXTVAL INTO :NEW.NUMEMP FROM DUAL;

La séquence a été créée comme suit : CREATE SEQUENCE SQEMP2INCREMENT BY 1 START WITH 10000; On exécute ensuite l instruction INSERT sans le numemp; IMPORTANT : lors de la création d un trigger, les anciennes valeurs sont nommées :old.colonne (faire attention aux deux points) Les nouvelles valeurs sont nommées :new.colonne (faire attention aux deux points) Exemple 3 Contrôler les salaires : ils doivent être plus grand que le plus petit des salaires et plus petit que le plus grand des salaire CREATE OR REPLACE TRIGGER CTRLsalaire BEFORE INSERT OR UPDATE OF salaire ON employes FOR EACH ROW DECLARE minsal number; maxsal number; /* retrouver le salaire minimum et maximum dans la table employes SELECT MIN(salaire), Max(salaire) INTO minsal, maxsal FROM Employes; /* s'il y a un problème, on provoque une erreur */ IF (:new.salaire<minsal OR :new.salaire>maxsal) THEN raise_application_error (-20300,'Salaire incorrect');

Exercice : Écrire un trigger qui permet de mettre le salaire à 5000$ si un employé n a pas de salaire. Solution: CREATE TRIGGER DefaultSalaire BEFORE INSERT OR UPDATE OF salaire ON employe FOR EACH ROW WHEN (new.salaire is null) SELECT 5000 INTO :new.salaire FROM dual; Activation et désactivation d un trigger Pour qu un trigger soit déclenché celui-ci doit être ACTIVÉ. Par défaut, les triggers d oracle sont activés dès leur création. On peut activer un triggers par SQL Développer ou par la commande ALTER TRIGGER nomtrigger ENABLE. Si un trigger est désactivé, alors il est stocké mais ignoré Pour désactiver un trigger, utiliser la même commande ALTER TRIGGER avec l option DISABLE. On peut désactiver TOUS les triggers associés à une table par la commande ALTER TABLE DISABLE ALL TRIGGERS. Pour les réactiver de nouveau, utiliser ALTER TABLE ENABLE ALL TRIGGERS. Pour supprimer un trigger, utiliser DROP TRIGGER nomdutrigger

Les prédicats INSERTING, UPDATING, DELETING Lorsqu un trigger porte sur les opérations DML, nous pouvons ajouter des prédicats dans notre code, pour indiquer les opérations de déclenchement : CREATE TRIGGER... BEFORE INSERT OR UPDATE ON employe...... IF INSERTING THEN... IF UPDATING THEN...... Exemple : On veut enregistrer les opérations réalisées sur notre table 1 CREATE TRIGGER ctrloperation BEFORE DELETE OR INSERT OR UPDATE ON Employe FOR EACH ROW IF INSERTING THEN INSERT INTO table_ctrl VALUES ( USER, 'Insertion'); ELSIF DELETING THEN INSERT INTO table_ctrl VALUES ( USER, 'Destruction'); ELSIF UPDATING THEN INSERT INTO table_ctrl VALUES ( USER, 'Modification'); ELSIF UPDATING(salaire) THEN INSERT INTO table_ctrl VALUES ( USER, 'Modification du salaire'); 1 Source : SQL, Denis Brunet

IMPORTANT : Un trigger ligne ne peut pas lire (SELECT) et/ou modifier la table concernée (appelée table mutante) par l'instruction (INSERT, UPDATE ou DELETE) qui a déclenché ce trigger. Exercice 1 : Écrire un trigger qui permet de contrôler les insertions et les modifications dans la table Commandes, comme suit : La date de livraison ne doit pas être inférieure à la date de commande Exercice 2 Écrire un trigger qui permet de contrôler les ajouts et les modifications des salaires. Si le JOB n est pas PRESIDENT, alors Lors de l ajout, modification d un nouvel employé, nous devons vérifier si le salaire de celui-ci se retrouve dans la fourchette des salaires. Les salaires sont en fonction de JOB et sont dans la table Grille