Les triggers. Chapitre V Triggers. 5.2 Caractéristiques. 5.1 Généralités. Chapitre 5 : Triggers 1

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

TP Contraintes - Triggers

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

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

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

Intégrité des données

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

Bases de données avancées

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

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

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

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

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

Olivier Mondet

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

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

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

Introduction au PL/SQL Oracle. Alexandre Meslé

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

Historisation des données

Bases de Données Avancées PL/SQL

Devoir Data WareHouse

Le Langage De Description De Données(LDD)

Corrigés détaillés des exercices

TP3 : Creation de tables 1 seance

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

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

Compétences Business Objects

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

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

Gestion de base de données

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

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

CREATION WEB DYNAMIQUE

SQL Historique

Bases de Données Réparties

Auto-évaluation Oracle: cours de base

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

OpenPaaS Le réseau social d'entreprise

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

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

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

Création et Gestion des tables

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

1. Base de données SQLite

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

Gestion des utilisateurs et de leurs droits

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

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

Administration des bases 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

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

Bases de données relationnelles

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

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

Langage SQL : créer et interroger une base

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

INTEGRITE ET BD ACTIVES

A QUOI SERVENT LES BASES DE DONNÉES?

BTS/CGO P10 SYSTEME INFORMATION Année

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

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

Bases de données et sites WEB

Présentation Windows Azure Hadoop Big Data - BI

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

I4 : Bases de Données

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

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

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

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

SQL Server Cyril Gruau. 11 février 2003

FileMaker 13. Guide de référence SQL

MySQL / SQL EXEMPLES

Les bases de données

A QUOI SERVENT LES BASES DE DONNÉES?

Introduction aux Bases de Données 2004/2005

Encryptions, compression et partitionnement des données

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

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

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

Réplication logique avec PostgreSQL 9.4

BASES DE DONNEES TP POSTGRESQL

INSTITUT NATIONAL DES TELECOMMUNICATIONS CONTROLE DES CONNAISSANCES. 2. Les questions sont indépendantes les unes des autres.

SQL Server 2000, Analysis Services et DTS

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

Oracle Application Express: Développer des Applications Web

Bases de Données Avancées

Bases de données Cours 4 : Le langage SQL pour ORACLE

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

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

Les BASES de DONNEES dans WampServer

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

1. Qu'est qu'un tablespace?

Application BdD et JDBC. Introduction 1/28. I Dans tout les cas, une seule problématique. I Quelques alternatives :

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

Support de Cours REQUÊTES TRANSACT-SQL DANS MICROSOFT SQL SERVER Stéphane N GUESSAN Groupe Pigier Abidjan Version 1.

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

Master Exploration Informatique des données DataWareHouse

Transcription:

Les triggers Chapitre V Triggers 5.1 Généralités 5.2 Caractéristiques 5.3 Description d un trigger 5.4 Déclencheur par ordre 5.5 Déclencheur ligne 5.6 Gestion des triggers 5.7 Grammaire 5.8 Triggers Instead_of 5.9 Conclusion 5.1 Généralités «trigger» = gachette déclencheur «trigger»= traitement déclenché sur événement Usage vérification de certaines contraintes lancement de certains traitements (ex. alerte) 5.2 Caractéristiques Exprimé sous forme d une procédure PL/SQL Lancement sur événement, qqf conditions Associé à une seule table Peut être actif ou inactif Exécution avec succès ou échec Peut exister des lancements en cascade Triggers par ordre (une fois), soit pour chaque ligne (trigger-ligne) Chapitre 5 : Triggers 1

5.3 Description d un trigger Evénement INSERT UPDATE DELETE Type : ligne : FOR EACH ROW Séquencement BEFORE AFTER Avec condition : WHEN WHEN INSERTING WHEN DELETING WHEN UPDATING Ordres possibles similaire à une procédure PL/SQL en SQL: seuls SELECT-INTO, INSERT, DELETE Exemple CREATE TRIGGER BEFORE INSERT OR UPDATE OR DELETE ON.. BEGIN IF INSERTING THEN.. END IF; IF DELETING THEN.. END IF; IF UPDATING THEN.. END IF;. END ; TRIGGER VALIDE, ORDRE EXECUTE ORDRE EXECUTE, TRIGGER VALIDE TRIGGER BEFORE ORDRE SQL AVEC SANS TRIGGER (INSERT, UPDATE, DELETE) TRIGGER AFTER TRIGGER INVALIDE, ORDRE NON EXECUTE ORDRE EXECUTE, TRIGGER INVALIDE, ORDRE ANNULE Chapitre 5 : Triggers 2

5.4 Déclencheur par ordre Création CREATE [OR REPLACE] TRIGGER [schema.]nom_declencheur sequence-trigger événement [OR événement] ON nom_table Bloc_PL/SQL sequence-trigger : BEFORE ou AFTER événement : INSERT ou UPDATE ou DELETE Remarque Si UPDATE, possibilité de limiter la MAJ sur certaines colonnes Exemple UPDATE OF nom_colonne [, nom_colonne] Trigger invalidé RAISE_APPLICATION_ERROR (error_number, error_text) Error_number : -20001 à -20999 Trigger : BEFORE Peut permettre de limiter l exécution sous certaines conditions avec messages d erreurs. Exemple : petit contrôle de vraisemblance limitation d autorisation d ajout d enregistrement Chapitre 5 : Triggers 3

CREATE TRIGGER ajout_pilote BEFORE INSERT on pilote BEGIN IF USER!= DUPONT THEN RAISE_APPLICATION_ERROR (- 20001, Utilisateur non autorisé ); ENDIF; END; Trigger : AFTER Validations a posteriori Propager des mises à jour Logs Exemple : vérifier que le nombre moyen d heures de vol reste inférieur ou égal à 20 000 CREATE TRIGGER verif_nbvol AFTER UPDATE on nbhvol OR INSERT on avion DECLARE v_avg_nbhvol NUMBER BEGIN SELECT AVG (nbhvol) INTO v_avg_nbhvol FROM avion ; IF v_avg_nbhvol > 20000 THEN RAISE_APPLICATION_ERROR (- 20002, Le nombre d heures TO_CHAR(v_avg_nbhvol) est trop élevé ); ENDIF; END; 5.5 Déclencheur ligne Création CREATE [OR REPLACE] TRIGGER [schema.]nom_declencheur sequence événement [OR événement] ON nom_table REFERENCING {[OLD [AS] ancien] [NEW [AS] nouveau]}] FOR EACH ROW [WHEN condition Bloc_PL/SQL Chapitre 5 : Triggers 4

OLD et NEW OLD, NEW, :OLD, :NEW OLD NEW INSERT NULL Valeur créée DELETE UPDATE Valeur avant suppression Valeur avant modification NULL Valeur après modification OLD et NEW dans les procédures :OLD et : NEW dans les triggers 5.6 Gestion des triggers 12 possibilités Création, exécution CREATE TRIGGER ALTER TRIGGER Information sur les triggers dans les tables USERS_TRIGGERS ALL_TRIGGERS DBA_TRIGGERS BEFORE UPDATE ligne BEFORE DELETE ligne BEFORE INSERT ligne BEFORE UPDATE ordre BEFORE DELETE ordre BEFORE INSERT ordre AFTER UPDATE ligne AFTER DELETE ligne AFTER INSERT ligne AFTER UPDATE ordre AFTER DELETE ordre AFTER INSERT ordre Chapitre 5 : Triggers 5

Triggers en cascade Dans le corps d un trigger, il peut y avoir INSERT, DELETE, ou UPDATE, mais TABLES DIFFERENTES Attention ne jamais modifier une colonne avec contraintes de type PRIMARY KEY UNIQUE KEY FOREIGN KEY Autres ordres Remplacement : REPLACE Suppression : DROP TRIGGER nom_decl Activation/Désactivation ALTER TRIGGER nom_decl DISABLE ALTER TRIGGER nom_decl ENABLE Activation/Désactivation sur une même table ALTER TABLE DISABLE ALL TRIGGERS ALTER TABLE ENABLE ALL TRIGGERS Mutating trigger Si trigger, la table est verrouillée : impossible de la modifier ailleurs Si nécessité de modifier un autre enregistrement de cette table, alors rédiger une procédure 5.7 Grammaire Avoir le privilège de créer des triggers Triggers sur un schéma sur la base entière Les tables doivent être créées auparavant Chapitre 5 : Triggers 6

CREATE TRIGGER Exemples Chapitre 5 : Triggers 7

DROP TRIGGER ALTER TRIGGER 5.8 Triggers Instead_of Mise à jour par l intermédiaire de vues Possibilités de mettre à jour plusieurs tables (celles référencées dans la vue) Possibilité d évaluer les états des tables avant et après (en évitant les mutating tables) Chapitre 5 : Triggers 8

Grammaire Exemple 1 CREATE VIEW order_info AS SELECT c.customer_id, c.cust_last_name, c.cust_first_name, o.order_id, o.order_date, o.order_status FROM customers c, orders o WHERE c.customer_id = o.customer_id; CREATE OR REPLACE TRIGGER order_info_insert INSTEAD OF INSERT ON order_info DECLARE duplicate_info EXCEPTION; PRAGMA EXCEPTION_INIT (duplicate_info, -00001); BEGIN INSERT INTO customers (customer_id, cust_last_name, cust_first_name) VALUES ( :new.customer_id, :new.cust_last_name, :new.cust_first_name); INSERT INTO orders (order_id, order_date, customer_id) VALUES ( :new.order_id, :new.order_date, :new.customer_id); EXCEPTION WHEN duplicate_info THEN RAISE_APPLICATION_ERROR ( num=> -20107, msg=> 'Duplicate customer or order ID'); END order_info_insert; / Exemple 2 SQL> SELECT * FROM Article WHERE noarticle = 10 2 / NOARTICLE DESCRIPTION PRIXUNITAIRE QUANTITÉENSTOCK ---------- -------------------- ------------ --------------- 10 Cèdre en boule 10,99 20 SQL> CREATE VIEW ArticlePrixPlusTaxe AS 2 SELECT noarticle, description, prixunitaire * 1.15 AS prixplustaxe 3 FROM Article 4 / View created. SQL> UPDATE ArticlePrixPlusTaxe 2 SET prixplustaxe = 23 3 WHERE noarticle = 10 4 / SET prixplustaxe = 23 * ERROR at line 2: ORA-01733: virtual column not allowed here Chapitre 5 : Triggers 9

Solution Vérification SQL> CREATE OR REPLACE TRIGGER InsteadUpdate 2 INSTEAD OF UPDATE ON ArticlePrixPlusTaxe 3 REFERENCING 4 OLD AS ligneavant 5 NEW AS ligneaprès 6 FOR EACH ROW 7 BEGIN 8 UPDATE Article 9 SET 10 noarticle = :ligneaprès.noarticle, 11 description = :ligneaprès.description, 12 prixunitaire = :ligneaprès.prixplustaxe / 1.15 13 WHERE noarticle = :ligneavant.noarticle; 14 END; 15 / SQL> UPDATE ArticlePrixPlusTaxe 2 SET prixplustaxe = 23 3 WHERE noarticle = 10 4 / 1 row updated. SQL> SELECT * FROM Article WHERE noarticle = 10 2 / NOARTICLE DESCRIPTION PRIXUNITAIRE QUANTITÉENSTOCK ---------- -------------------- ------------ --------------- 10 Cèdre en boule 20 20 Trigger created. = 23 15% 5.9 Conclusion Trigger = outil puissant pour contrôle de cohérence et lancement automatique de traitement Attention aux enchaînements de triggers Attention débogage parfois difficile, notamment si «mutating trigger» Si limitations =>écriture de procédures PL/SQL Chapitre 5 : Triggers 10