Fondements des bases de données Programmation en PL/SQL Oracle (2/2)

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

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

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

TP Contraintes - Triggers

Bases de données avancées

Corrigés détaillés des exercices

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

Bases de Données Avancées PL/SQL

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

A QUOI SERVENT LES BASES DE DONNÉES?

Administration des bases de données

Intégrité des données

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

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

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

Notes de cours : bases de données distribuées et repliqué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 relationnelles et leurs systèmes de Gestion

Devoir Data WareHouse

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

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

A QUOI SERVENT LES BASES DE DONNÉES?

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

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

SQL Historique

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

Olivier Mondet

Vues: définition. Vues: avantages. Vues: inconvénients. Vues: exemple. Vues: syntaxe 08/12/2009

Langage SQL : créer et interroger une base

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

CREATION WEB DYNAMIQUE

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

Auto-évaluation Oracle: cours de base

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

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

Bases de Données Réparties

Quelques aspects du Relationnel-Objet du SGBD Oracle

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

Historisation des données

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

Présentation Windows Azure Hadoop Big Data - BI

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

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

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

Oracle Le langage procédural PL/SQL

Le Langage De Description De Données(LDD)

Le langage procédural PL-PGSQL

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

Bases de données et sites WEB

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

Le Langage SQL version Oracle

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

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

Gestion de base de données

INTEGRITE ET BD ACTIVES

Bases de données. Mihaela Mathieu

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

Hala Skaf-Molli. Nancy-Université 14 mai 2007

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

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

IFT3030 Base de données. Chapitre 1 Introduction

Les bases de données

BTS/CGO P10 SYSTEME INFORMATION Année

PHP. PHP et bases de données

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

OpenPaaS Le réseau social d'entreprise

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)

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

1 Position du problème

Création et Gestion des tables

BASES DE DONNEES TP POSTGRESQL

Gestion des utilisateurs et de leurs droits

TP3 : Creation de tables 1 seance

FileMaker 13. Guide de référence SQL

1. Base de données SQLite

Optimisation SQL. Quelques règles de bases

Encryptions, compression et partitionnement des données

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

I/ Présentation. On considère une BD CIRQUE dont le schema conceptuel : PERSONNEL _CIRQUE (NOM, ROLE) ;

Exploiter les statistiques d utilisation de SQL Server 2008 R2 Reporting Services

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.

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

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

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

CATALOGUE FORMATIONS DOMAINE Bases de données

14/04/2014. un ensemble d'informations sur un sujet : exhaustif, non redondant, structuré, persistant. Gaëlle PERRIN SID2 Grenoble.

Bases de données relationnelles

1. Qu'est qu'un tablespace?

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

Compétences Business Objects

APIs de table pour SQL Server

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

Java DataBaseConnectivity

Gestion de stock pour un magasin

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

Accès aux bases de données

Transcription:

Fondements des bases de données Programmation en PL/SQL Oracle (2/2) Équipe pédagogique BD romuald.thion@univ-lyon1.fr http://liris.cnrs.fr/~rthion/dokuwiki/enseignement:lif10/ Version du 18 février 2014

Les exceptions Procédures et fonctions Triggers

Les exceptions Procédures et fonctions Triggers

Les exceptions Une exception est une erreur qui survient durant une exécution, elle est soit : prédéfinie par Oracle, définie par le programmeur. Exceptions prédéfinies NO_DATA_FOUND quand SELECT...INTO ne retourne aucune ligne. TOO_MANY_ROWS quand SELECT...INTO retourne plusieurs lignes. VALUE_ERROR érreur numérique. ZERO_DIVIDE division par zéro OTHERS toutes erreurs non interceptées.

Traitement des exceptions Saisir une exception Une exception ne provoque pas nécessairement l arrêt du programme : elle peut être saisie par une partie EXCEPTION. Une exception non saisie remonte dans la procédure appelante (où elle peut être saisie). Exemple... EXCEPTION WHEN NO_DATA_FOUND THEN... WHEN TOO_MANY_ROWS THEN... WHEN OTHERS THEN o p t i o n n e l...

Exceptions utilisateur Elles doivent être déclarées avec le type EXCEPTION On les lève avec l instruction RAISE Exemple DECLARE v _ s a l a i r e numeric ( 8, 2 ) ; e _ s a l a i r e _ t r o p _ b a s EXCEPTION; SELECT s a l INTO v _ s a l a i r e FROM emp WHERE matr = 5 0 ; IF v _ s a l a i r e < 2000 THEN RAISE e _ s a l a i r e _ t r o p _ b a s ; END IF ; EXCEPTION WHEN e _ s a l a i r e _ t r o p _ b a s THEN dbms_output. p u t _ l i n e ( S a l a i r e t r o p bas ) ; WHEN OTHERS THEN dbms_output. p u t _ l i n e (SQLERRM ) ;

Les exceptions Procédures et fonctions Triggers

Bloc anonyme ou nommé Un bloc anonyme PL/SQL est un bloc DECLARE......END comme dans les exemples précédents. On peut exécuter directement un bloc PL/SQL anonyme. On passe plutôt une procédure ou une fonction nommée pour réutiliser le code.

Procédure sans paramètre Exemple CREATE OR REPLACE PROCEDURE list_ nom_ emps IS DECLARE CURSOR c_nom_emps IS SELECT nom, a d r e s s e FROM emp ; FOR v_emp IN c_nom_emps LOOP dbms_output. p u t _ l i n e ( C l i e n t : UPPER( v_emp. nom) V i l l e : v_emp. a d r e s s e ) ; END LOOP; / CALL list_nom_emps ( ) ;

Procédure avec paramètres Exemple CREATE OR REPLACE PROCEDURE liste_nom_emps ( v i l l e IN varchar2, v _ r e s u l t OUT number ) IS SELECT COUNT( ) INTO v _ r e s u l t FROM emp WHERE a d r e s s e LIKE ( % v i l l e % IN ) ; lecture seule / DECLARE v _ r e s u l t number ; liste_nom_emps ( Manchester, v _ r e s u l t ) ; dbms_output. p u t _ l i n e ( v _ r e s u l t ) ; / OUT écriture seule IN OUT lecture et écriture

Fonctions sans paramètre Exemple CREATE OR REPLACE FUNCTION nb_emps RETURN NUMBER Type de r e t o u r IS DECLARE i NUMBER; SELECT COUNT( ) INTO FROM emp ; RETURN i ; / SELECT nb_emps ( ) FROM DUAL; i DUAL est une pseudo table avec une seule colonne.

Fonctions avec paramètres Exemple CREATE OR REPLACE FUNCTION e u r o _ t o _ f r ( v_somme IN number ) RETURN NUMBER IS DECLARE taux CONSTANT number := 6. 5 5 9 5 7 ; RETURN v_somme taux ; / SELECT e u r o _ t o _ f r ( 1 5. 2 4 ) FROM d u a l ; Seuls les paramètres IN (en lecture seule) sont autorisés

Un peu plus... Visualisation du résultat : PRINT; Description des paramètres : DESC nom_procedure Suppression de procédures ou fonctions : DROP PROCEDURE nom_procedure DROP FUNCTION nom_fonction Table système contenant les procédures et fonctions : user_source Les procédures et fonctions peuvent être utilisées dans d autres procédures ou fonctions ou dans des blocs PL/SQL anonymes Les fonctions peuvent aussi être utilisées dans les requêtes

Les exceptions Procédures et fonctions Triggers

Les déclencheurs (triggers) Les contraintes prédéfinies ne sont pas toujours suffisantes Ex : Tout nouveau prix d un produit doit avoir une date de début supérieure à celle des autres prix pour ce produit Exécuter des actions lors de certains événements : AFTER ou BEFORE INSERT, DELETE ou UPDATE FOR EACH ROW non (STATEMENT) : exécuté une seule fois pour la commande. oui (ROW) : exécuté à chaque ligne concernée. Syntaxe CREATE [OR REPLACE ] TRIGGER trigger_name {BEFORE AFTER} {INSERT [OR] UPDATE [OR] DELETE} [ OF col_name ] ON table_ name [REFERENCING OLD AS o NEW AS n ] [FOR EACH ROW] WHEN ( c o n d i t i o n ) s q l s t a t e m e n t s

Accès aux valeurs modifiées Utilisation de NEW et OLD Si nous ajoutons un client dont le nom est toto alors nous récupérons ce nom grâce à la variable :new.nom Dans le cas de suppression ou modification, les anciennes valeurs sont dans la variable :old.nom Exemple Archiver le nom de l utilisateur, la date et l action effectuée dans une table LOG_CLIENTS lors de l ajout d un clients dans la table CLIENTS Créer la table LOG_CLIENTS avec la même structure que CLIENTS. Ajouter les colonnes USERNAME, DATEMODIF, TYPEMODIF. Créer un trigger AFTER INSERT ON clients

Accès aux valeurs modifiées Exemple CREATE or REPLACE TRIGGER logadd AFTER INSERT ON emp FOR EACH ROW INSERT INTO log_emp VALUES( : new. matr,... USER, SYSDATE, INSERT ) ; / INSERT INTO EMP VALUES ( 3, Tarjan, Robert, 2 4 4 6. 1 3, P r i n c e t SELECT FROM log_emp ; Bug de sqldeveloper Enter bindings : exécuter le script en intégralité dans un nouveau fichier...

Prédicats conditionnels Lorsqu un trigger a plusieurs opérations déclenchantes le corps peut avoir des prédicats conditionnels : IF INSERTING THEN... END IF; IF UPDATING THEN... END IF; On peut préciser les colonnes soumises aux opérations déclenchantes Exemple CREATE or r e p l a c e TRIGGER t_emp_sal_increase BEFORE UPDATE OF s a l, dep ON EMP FOR EACH ROW IF UPDATING( s a l ) THEN IF ( :NEW. s a l < :OLD. s a l ) THEN r a i s e _ a p p l i c a t i o n _ e r r o r ( 20000, S a l l a r y cannot d e c r e a s e END IF ; END IF ; /

Important Interdictions Les commandes de définition de données (LDD) les commandes de contrôle de transactions (ROLLBACK, COMMIT) Ne doivent pas être utilisées dans le corps d un trigger. Remarques Pour éviter une modification de données dans un trigger BEFORE, il faut lever une exeception. Le dictionnaire de données a des vues sur les triggers : USER_TRIGGERS, ALL_TRIGGERS, DBA_TRIGGERS. La commande DROP permet de supprimer un trigger.

Tables mutantes et contraignantes Une table mutante est une table en cours de modification par une opération déclenchante (UPDATE, DELETE, INSERT) ou l effet de DELETE CASCADE provenant de cette opération. Une table contraignante est une table qu une opération déclenchante doit lire, soit directement via une commande SQL (UPDATE SET... WHERE) ou indirectement pour une contrainte d intégrité référentielle. Les commandes SQL dans le corps d un trigger ne peuvent pas Lire (par une requête) ou modifier un table mutante d une opération déclenchante. Changer des valeurs sur les colonnes de clés (PRIMARY, FOREIGN, UNIQUE) d une table contraignante. Ces restrictions permettent d éviter la consultation d une table dans un état transitoire et donc incohérent.

Exemple d erreur CREATE OR REPLACE TRIGGER emp_count AFTER DELETE ON emp FOR EACH ROW DECLARE n i n t e g e r ; SELECT COUNT( ) INTO n FROM emp ; dbms_output. p u t _ l i n e ( On a n employes dans l a base ) ; DELETE FROM emp WHERE matr = 0 ; ORA-04091: table RTHION.EMP is mutating, trigger/function may not see it. Dans ce cas là, il ne faut pas utiliser FOR EACH ROW pour pouvoir déterminer la valeur du SELECT COUNT(*) FROM emp;.

Fin du sixième cours.