Déclencheurs (Triggers) Esther Pacitti

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

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

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

TP Contraintes - Triggers

Intégrité des données

Bases de données avancées

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

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

Bases de Données Avancées PL/SQL

Gestion des transactions et accès concurrents dans les bases de données relationnelles

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

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

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

Administration des bases de données

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

Le Langage De Description De Données(LDD)

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

INTEGRITE ET BD ACTIVES

Introduction au PL/SQL Oracle. Alexandre Meslé

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

Le langage procédural PL-PGSQL

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

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

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

//////////////////////////////////////////////////////////////////// Administration bases de données

Présentation Windows Azure Hadoop Big Data - BI

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

Bases de données et sites WEB

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

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

CATALOGUE FORMATIONS DOMAINE Bases de données

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

Historisation des données

Chapitre 10. Architectures des systèmes de gestion de bases de données

BTS/CGO P10 SYSTEME INFORMATION Année

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

Devoir Data WareHouse

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

Les bases de données

Corrigés détaillés des exercices

Optimisation SQL. Quelques règles de bases

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

A QUOI SERVENT LES BASES DE DONNÉES?

Langage SQL : créer et interroger une base

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

TP3 : Creation de tables 1 seance

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

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

CREATION WEB DYNAMIQUE

APIs de table pour SQL Server

Introduction aux Bases de Données 2004/2005

IFT3030 Base de données. Chapitre 1 Introduction

Gestion de base de données

Plan. Bases de Données. Sources des transparents. Bases de SQL. L3 Info. Chapitre 4 : SQL LDD Le langage de manipulation de données : LMD

Encryptions, compression et partitionnement des données

FileMaker 13. Guide de référence SQL

Olivier Mondet

SQL Historique

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

Bases de Données Réparties

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

Les bases fondamentales du langage Transact SQL

Les transactions 1/46. I même en cas de panne logicielle ou matérielle. I Concept de transaction. I Gestion de la concurrence : les solutions

OpenPaaS Le réseau social d'entreprise

A QUOI SERVENT LES BASES DE DONNÉES?

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

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

Le Langage SQL version Oracle

Paginer les données côté serveur, mettre en cache côté client

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

Support de cours «SGBD»

Bases de données. Mihaela Mathieu

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

IFT3030 Base de données. Chapitre 2 Architecture d une base de données

Compétences Business Objects

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

Algorithmique des Systèmes Répartis Protocoles de Communications

Modernisation, développement d applications et DB2 sous IBM i Technologies, outils et nouveautés Volubis.fr

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Auto-évaluation Oracle: cours de base

1. Base de données SQLite

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

Attaques applicatives

16H Cours / 18H TD / 20H TP

Université de Nice Sophia-Antipolis. Langage SQL. version 5.7 du polycopié. Richard Grin

Configurer la supervision pour une base MS SQL Server Viadéis Services

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)

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

Vincent Augusto

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

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Création et Gestion des tables

Gestion de stock pour un magasin

Sage 100 CRM - Guide de la Fusion Avancée Version 8. Mise à jour : 2015 version 8

AGRÉGATION «ÉCONOMIE ET GESTION»

Gestion des utilisateurs et de leurs droits

Les BASES de DONNEES dans WampServer

FORMATION A L UTILISATION DE PMB QUELQUES NOTIONS DE SQL

Transcription:

Déclencheurs (Triggers) Esther Pacitti

Définition Programme stocké et invoqué implicitement sur un événement affectant la BD Séquence de règles de production déclenchées à l apparition d un événement prédéfini Règles de Production: Event-Condition-Action Sur Evénement Si Condition Alors Action

Evènement Dépend des transitions de l état de la base: Avant ou après Insertion de données Avant ou après Mise à jour de données Avant ou après Suppression de données Evénement élémentaire ou composite Conjonction d événements élémentaires (Ensemble d événements élémentaires reliés par l opérateur OR)

Condition et Action Condition (when): Prédicat optionnel Action Block PL/SQL: exécuté après l apparition de l événement si la condition événtuelle est satisfaite. Peut contenir des procedures cataloguées Peut activer des déclencheurs en cascade: maximum 32

Caractéristiques Granulatité Déclencheur orienté par table (défaut) Déclencheur orienté par ligne: FOR EACH Condition autorisée uniquement pour le déclencheur par ligne Prise en compte de l état de la base Antérieur à l événement: :OLD Utérieur à l événement: :NEW

Utilisation Le déclencheur renforce des fonctionnalités std du SGB pour: Les valeurs calculées: alimentation de colonnes dérivées, de variables globales à la base, Les règles de gestion complexes L intégrité référentielle dans une architecture répartie La duplication de tables Une sécurité plus sophistiquée: accès à la base sur des critères temporels (date, heure), sur le contenu de table Un audit plus sophistique: statistiques sur les accès aux tables Etc

Déclencheur para table Syntaxe: CREATE/REPLACE TRIGGER nom_trigger BEFORE/AFTER événement1 [OR événement2[or événement3 ]] ON nom_table Bloc PL/SQL événement = INSERT, UPDATE [OF nomcoli, ] ou DELETE

Déclencheur par table Utilisé si le traitement porte globalement sur l ensemble des lignes de la table Un déclencheur BEFORE par table permet d éviter l exécution d un nombre important de traitements si certaines conditions ne sont pas respectées. Un déclencheur AFTER par table permet de vérifier si les opérations se sont exécutés correctement, de réaliser des calculs, un audit,

Exemple 1 Interdire l insertion, la mise à jour et la suppression de données de la table emp après 18h CREATE Trigger nmj_emp Before insert or update or delete on emp Begin IF (TO_CHAR(sysdate, HH24 )) > 18 Then if inserting then Raise_application_error(-20501, Insertion Interdite ); Elseif updating then Raise_application_error(-20502, Mise à jour Interdite ); Else Raise_application_error(-20502, Suppresion Interdite ); end if; End if; End;

Exemple2 Nombre de requêtes de modification intervenues sur la colonne salaire SAL de la table emp CREATE TRIGGER nb_maj_sal AFTER UPDATE OF SAL ON emp BEGIN END, UPADTE surv_emp SET cpt_maj = cpt_maj + 1 where code_op = MAJ ;

Déclencheur par ligne CREATE/REPLACE TRIGGER nom_trigger BEFORE/AFTER événement1 [OR événement2[or événement3 ]] ON nom_table FOR EACH Row [When condition] Bloc PL/SQL événement = INSERT, UPDATE [OF nomcoli, ] ou DELETE condition: prédicat exécuté pour chaque ligne

Utilisation Utilisé si le traitement porte sur chacune des lignes de la table Calcul d une colonne à partir d autre colonnes Duplication de données Audit sophistiqué, etc Exemple 1: Contrôle d intégrité référentielle pour le numéro de département (deptno) avant chaque insertion ou mise à jour sur la table Emp par rapport au contenu de la table Dept Exemple 2: Comptabiliser le nombre de lignes ajoutées, mises à jour ou supprimées dans la table emp.

Exemple 1 CREATE Trigger nmj_emp AFTER insert or update or delete on emp For each row BEGIN IF INSERTING THEN UPADTE Surv_emp SET cpt_maj = cpt_maj +1 where code_op = AJOUT ; ELSEIF UPDATING THEN UPADTE Surv_emp SET cpt_maj = cpt_maj +1 where code_op = MAJ ; ELSE UPADTE Surv_emp SET cpt_maj = cpt_maj +1 where code_op = SUP ; END IF; END IF; END;

Exemple 2 CREATE TRIGGER total_salary AFTER DELETE OR INSERT or UPDATE OF deptno, sal, ON EMP FOR EACH ROW BEGIN IF DELETING OR (UPDATING and :old.deptno!= :new.deptno) THEN UPDATE dept SET total_sal = total_sal - :old.sal WHERE deptno = :old.deptno; END IF; IF INSERTING OR (UPDATING and :old.deptno!= :new.deptno) THEN UPDATE dept SET total_sal = total_sal -+:old.sal WHERE deptno = :new.deptno; ENF IF; IF (UPDATING AND :old.deptno = :new.deptno and :old.sal!= :new.sal) THEN UPADTE dept SET total_sal = total_sal -:old.sal + :new.sal WHERE deptno = :new.deptno; END IF END;

Status d un déclencheur Enable: actif (dès sa création) ALTER TRIGGER nom_trigger ENABLE ALTER TABLE nom_table ENABLE all triggers Disable ALTER TRIGGER nom_trigger DISABLE ALTER TABLE nom_table DISABLE all triggers

Update T1 SET Déclencheurs en Cascade Before update on T1 For each row Begin insert into T2 values values ( ) End; Before update on T2 For each row Begin insert into values ( ); End;

ATTENTION!!! Une utilisation abusive de déclencheurs sur une base de données peut déboucher sur: Des inter dépendances très complexes entre tables et par conséquence, sur une application difficilement maintenable. Des temps de réponse non raisonnables pour utilisateurs.