Bases de données Programmation PL/SQL. LP TOSPI, IUT Montluçon, Université Blaise Pascal 2010-2011 Laurent d Orazio



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

Bases de données avancées

Bases de Données Avancées PL/SQL

TP Contraintes - Triggers

Oracle Le langage procédural PL/SQL

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

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

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

A QUOI SERVENT LES BASES DE DONNÉES?

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

Administration des bases de données

A QUOI SERVENT LES BASES DE DONNÉES?

Introduction au PL/SQL Oracle. Alexandre Meslé

Le langage procédural PL-PGSQL

Quelques aspects du Relationnel-Objet du SGBD Oracle

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

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

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

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

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

Corrigés détaillés des exercices

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

Intégrité des données

Devoir Data WareHouse

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

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

Développement d applications avec les bases de données

Corrigé des TD 1 à 5

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

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

Gestion de base de données

Arbres binaires de recherche

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

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


Auto-évaluation Oracle: cours de base

Algorithmique & programmation

AGRÉGATION «ÉCONOMIE ET GESTION»

Java Licence Professionnelle CISII,

Olivier Mondet

PROJET 1 : BASE DE DONNÉES REPARTIES

Structure fonctionnelle d un SGBD

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

Présentation du PL/SQL

Génie Logiciel avec Ada. 4 février 2013

Bases de données et sites WEB

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

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

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

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

CATALOGUE FORMATIONS DOMAINE Bases de données

Programmer en JAVA. par Tama

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

Le Langage De Description De Données(LDD)

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

CREATION WEB DYNAMIQUE

BASES DE DONNEES TP POSTGRESQL

Bases de Données Réparties

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

Algorithmique et Programmation, IMA

Ora2Pg. Présentation, bonnes pratiques et futur du projet

Le Langage SQL version Oracle

Panorama des Bases de Données

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

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

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

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

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

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

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)

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

NIVEAU D'INTERVENTION DE LA PROGRAMMATION CONCURRENTE

Langage SQL : créer et interroger une base

Historisation des données

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

PRÉAMBULE... 2 CRÉATION DE LA BASE DE DONNÉES...

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

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Bases de données relationnelles

Attaques applicatives

Mysql avec EasyPhp. 1 er mars 2006

MS SQL Express 2005 Sauvegarde 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)

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Bases de données avancées Introduction

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

4. Groupement d objets

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

OpenPaaS Le réseau social d'entreprise

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

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Cours Informatique Master STEP

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

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

SQL Historique

.NET - Classe de Log

APIs de table pour SQL Server

Transcription:

Bases de données Programmation PL/SQL LP TOSPI, IUT Montluçon, Université Blaise Pascal 2010-2011 Laurent d Orazio

Plan I. Vue d ensemble et principes de fonctionnement II. Eléments de programmation III. Curseurs IV. Gestion des exceptions V. Procédures et fonctions VI. Paquetages VII.Triggers 2010/2011 BD - PL/SQL 2

Plan I. Vue d ensemble et principes de fonctionnement A. Définition B. Exemple introductif II. Eléments de programmation III. Curseurs IV. Gestion des exceptions V. Procédures et fonctions VI. Paquetages VII.Triggers 2010/2011 BD - PL/SQL 3

A. Définition Acronyme PL SQL = ProceduraL SQL Objectif Proposer des fonctionnalités procédurales performantes (traitements proches des données) pour contrôler les données (gestion de tableaux, boucles, etc.) 2010/2011 BD - PL/SQL 4

B. Exemple introductif (1) Exemple Si un client essaie de retirer plus d argent qu il n en a, indiquer «fonds insuffisants», sinon mettre à jour le compte. Implantation possible en SQL ACCEPT personne PROMPT 'Nom du détenteur de compte' ACCEPT montant PROMPT 'Montant du retrait' UPDATE Comptes SET solde=solde &montant WHERE detenteur='&personne' AND solde>&montant; SELECT Fonds insuffisants FROM Comptes WHERE detenteur='&personne' AND solde<=&montant; Pas vraiment satisfaisant... Expressivité peu élégante Exécution des 2 requêtes (pas de structure conditionnelle en SQL) 2010/2011 BD - PL/SQL 5

B. Exemple introductif (2) En PL/SQL : spécification create or replace procedure retrait (pers in varchar, montant in real) is courant real; begin select solde into courant from comptes where detenteur=pers; if (montant > courant) then raise_application_error(-20101, 'Fonds insuffisants'); else update comptes set solde=solde-montant where detenteur=personne; commit; end if; end retrait; 2010/2011 BD - PL/SQL 6

B. Exemple introductif (3) En PL/SQL : utilisations SQL> EXECUTE retrait('jean',10.2); PL/SQL procedure successfully completed. SQL> EXECUTE retrait('jean',10000); ERROR at line 1; OAR-20101: Fonds insuffisants 2010/2011 BD - PL/SQL 7

Plan I. Vue d ensemble et principes de fonctionnement II. Eléments de programmation A. Structure d un programme PL/SQL B. Types de données C. Structures conditionnelles D. Structures itératives III. Curseurs IV. Gestion des exceptions V. Procédures et fonctions VI. Paquetages VII.Triggers 2010/2011 BD - PL/SQL 8

A. Structure d un programme PL/SQL Structure d un programme PL/SQL [declare] /*variables, constantes, exceptions, curseurs*/ begin /*Ordres SQL, instructions PL/SQL, structures de contrôles*/ [exception] /*Traitement des exceptions*/ end; Remarque Syntaxe similaire aux langages ADA, Modula et Pascal 2010/2011 BD - PL/SQL 9

B. Types de données Types de données standards SQL char, date, number, etc. Types intégrés dans PL/SQL boolean, binary, integer Types structurés PL/SQL record, table Structures de données pour la gestion de résultats de requêtes cursor Types de données définis par les utilisateurs 2010/2011 BD - PL/SQL 10

C. Structures conditionnelles 1. Structure IF (1) Objectif Test de condition simple Syntaxe if <condition> then <instruction(s)> end if; Remarque Possibilité d imbrication de plusieurs conditions 2010/2011 BD - PL/SQL 11

C. Structures conditionnelles 1. Structure IF (2) Exemple 1 Augmentation du salaire de 15% si la date est postérieure au 17/11/2008 Code PL/SQL if date>'17-novembre-08' then salaire:=salaire*1,15; end if; 2010/2011 BD - PL/SQL 12

C. Structures conditionnelles 1. Structure IF (3) Exemple 2 Augmentation du salaire de 15% de l employé Simpson si la date est postérieure au 17/11/2008 Code PL/SQL if date>'17-novembre-08' then if employé='simpson' then salaire:=salaire*1,15; end if; end if; 2010/2011 BD - PL/SQL 13

C. Structures conditionnelles 2. Structure IF-THEN-ELSE (1) Objectif Test de condition simple avec traitement de la condition opposée Syntaxe if <condition> then <instruction(s)> else <instruction(s)> end if; Remarque Possibilité d imbrication de plusieurs conditions 2010/2011 BD - PL/SQL 14

C. Structures conditionnelles 2. Structure IF-THEN-ELSE (2) Exemple 1 Augmentation du salaire de 15% si la date est postérieure au 17/11/2008, de 5% sinon Code PL/SQL if date>'17-novembre-08' then salaire:=salaire*1,15; else salaire:=salaire*1,05; end if; 2010/2011 BD - PL/SQL 15

C. Structures conditionnelles 2. Structure IF-THEN-ELSE (3) Exemple 2 Augmentation du salaire de 15% de l employé Simpson si la date est postérieure au 17/11/2008 ou 10% sinon. Augmentation pour les autres employés de 5%. Code PL/SQL if employé='simpson' then else if date>'17-novembre-08' then else end if; salaire:=salaire*1,15; salaire:=salaire*1,10; salaire:=salaire*1,05; end if; 2010/2011 BD - PL/SQL 16

C. Structures conditionnelles 3. Structure IF-THEN-ELSIF (1) Objectif Test de plusieurs conditions Syntaxe if <condition> then <instruction(s)> elsif <condition> then <instruction(s)> elsif <condition> then <instruction(s)>... end if; 2010/2011 BD - PL/SQL 17

C. Structures conditionnelles 3. Structure IF-THEN-ELSIF (2) Exemple Augmentation du salaire de 15% de l employé Simpson de 10% de l employé Flanders et de 5% pour les autres. Code PL/SQL if employé='simpson' then salaire:=salaire*1,15; elsif employé='flanders' then salaire:=salaire*1,10; else salaire:=salaire*1,05; end if; 2010/2011 BD - PL/SQL 18

C. Structures conditionnelles 4. Structure CASE (1) Objectif Test de plusieurs conditions Différences avec if-then-else Test de plusieurs valeurs en une construction Définition de la valeur d une variable Syntaxe case <variable> when <expression1> then <valeur1> when <expression2> then <valeur2>... else <valeurn> end; 2010/2011 BD - PL/SQL 19

C. Structures conditionnelles 4. Structure CASE (2) Exemple Affichage du club de football en fonction du nom de la ville (Grenoble GF38, Marseille OM,..., autre pas d équipe) Rappel Affichage en SQL : dbms_output.put_line(<chaîne de caractères>) Code PL/SQL val:=case ville when 'Grenoble' then 'GF38'... else 'Pas d équipe' end; dbms_output.put_line(val); 2010/2011 BD - PL/SQL 20

D. Structures itératives 1. Structure LOOP (1) Objectif Exécution à plusieurs reprises d un groupe d instructions Syntaxe loop <instruction1>;... end loop; 2010/2011 BD - PL/SQL 21

D. Structures itératives 1. Structure LOOP (2) Exemple Incrémenter jusqu à la valeur 10 un nombre initialisé à 0 Code PL/SQL val:=0; loop val:=val+1; if(val=10) then end if; end loop; exit; 2010/2011 BD - PL/SQL 22

D. Structures itératives 2. Structure WHILE (1) Objectif Exécution d un groupe d instructions jusqu à vérification d une condition Syntaxe while <condition> loop <instruction1>;... end loop; 2010/2011 BD - PL/SQL 23

D. Structures itératives 2. Structure WHILE (2) Exemple Incrémenter jusqu à la valeur 10 un nombre initialisé à 0 Code PL/SQL val:=0; while var < 10 loop val:=val+1; end loop; 2010/2011 BD - PL/SQL 24

D. Structures itératives 3. Structure FOR (1) Objectif Itérations d un groupe d instructions un certain nombre de fois Syntaxe for <variable d itération> in <borne inf>..<borne sup> loop <instruction1>;... end loop; 2010/2011 BD - PL/SQL 25

D. Structures itératives 3. Structure FOR (2) Exemple Afficher les valeurs entières de 1 à 5 Code PL/SQL for compteur in 1..5 loop dbms_output.put_line(compteur); end loop; 2010/2011 BD - PL/SQL 26

D. Structures itératives 3. Structure FOR (3) Remarque Possibilité de parcourir en sens inverse Syntaxe for <variable d itération> in reverse <borne inf>..<borne sup> loop <instruction1>;... end loop; 2010/2011 BD - PL/SQL 27

D. Structures itératives 3. Structure FOR (4) Exemple Afficher les valeurs entières de 1 à 5 en sens inverse Code PL/SQL for compteur in reverse 1..5 loop dbms_output.put_line(compteur); end loop; 2010/2011 BD - PL/SQL 28

D. Structures itératives 4. Instruction EXIT (1) Objectif Quitter une structure itératives Syntaxe <structure itérative> loop <instruction1>;... exit [when <condition>] end loop; 2010/2011 BD - PL/SQL 29

D. Structures itératives 4. Instruction EXIT (2) Exemple Afficher les valeurs entières de 1 à 5 et interrompre la boucle si la valeur du compteur est égale à 3 Code PL/SQL for compteur in reverse 1..5 loop dbms_output.put_line(compteur); exit when compteur=3; end loop; 2010/2011 BD - PL/SQL 30

Plan I. Vue d ensemble et principes de fonctionnement II. Eléments de programmation III. Curseurs A. Objectif et définition B. Fonctionnement C. Exemple D. Attributs sur les curseurs E. Déclaration where current of IV. Gestion des exceptions V. Procédures et fonctions VI. Paquetages VII.Triggers 2010/2011 BD - PL/SQL 31

A. Objectif et définition Objectif Récupération d un résultat de requête sous forme d une collection Exemple select a,b into x,y from t where clé = 123 Récupération de l'unique ligne du résultat de la requête Placement dans le couple de variables (x,y) Définition Variable permettant d accéder à un résultat de requête SQL représentant une collection (ensemble de n-uplets). 2010/2011 BD - PL/SQL 32

B. Fonctionnement Utilisation de curseurs 1. Déclaration du curseur 2. Remplissage en une seule fois par exécution de la requête 3. Récupération des lignes une par une (parcours séquentiel du curseur par un pointeur logique) 4. Libération de la zone qui devient inaccessible 2010/2011 BD - PL/SQL 33

C. Exemple Exemple Calculer la somme des salaires de tous les employés Code PL/SQL declare cursor c is select * from Employes where salaire > 1000; total integer := 0; begin for emp in c loop total := total + emp.salaire; end loop; end; 2010/2011 BD - PL/SQL 34

D. Attributs sur les curseurs %FOUND VRAI si un n-uplet est trouvé %ISOPEN VRAI si le curseur est actuellement actif %NOTFOUND VRAI après la lecture du dernier n-uplet %ROWCOUNT Retourne le nombre de n-uplets dans le curseur 2010/2011 BD - PL/SQL 35

E. Déclaration where current of (1) Objectif Modification via SQL sur le n-uplet courant Syntaxe (pour un curseur c) cursor nomcurseur... for update... <opération> where current of nomcurseur Remarque Ne pas oublier de déclarer for update 2010/2011 BD - PL/SQL 36

E. Déclaration where current of (2) Exemple Augmentation de salaire des employés peu rémunérés (employés dont le salaire est inférieur à 1500 ) Code PL/SQL declare cursor c is select * from Employes for update; begin for e in c loop if e.salaire < 500.0 then update Employes set salaire=salaire*1.2 where current of c; end if; end loop; end; 2010/2011 BD - PL/SQL 37

Plan I. Vue d ensemble et principes de fonctionnement II. Eléments de programmation III. Curseurs IV. Exceptions A. Définition B. Gestion des exceptions C. Déclaration d exceptions D. Exceptions prédéfinies V. Procédures et fonctions VI. Paquetages VII.Triggers 2010/2011 BD - PL/SQL 38

A. Définition Définition Avertissement ou erreur rencontré(e) lors de l exécution Exemples Erreur système (espace mémoire insuffisant) Erreur causée par le programme utilisateur Etc. Remarque Possibilité pour les utilisateurs de définir des exceptions Exemple d exception utilisateur Lors de l affichage de tous les articles, si l'un dépasse 10 000 euros, le dire et arrêter l affichage. 2010/2011 BD - PL/SQL 39

B. Gestion des exceptions Objectif de la gestion des exceptions Associer un traitement à des «exceptions» survenues lors de l'exécution d'un bloc PL/SQL Exemples Notification à l utilisateur Annulation de l opération Etc. 2010/2011 BD - PL/SQL 40

C. Déclaration d exceptions (1) Syntaxe [declare] begin exception end; <NomException1> exception;... <instructions> raise <NomException1> when <NomException1> then <instruction1>;... 2010/2011 BD - PL/SQL 41

C. Déclaration d exceptions (2) Exemple Afficher «prix élevé» si le prix d un article dépasse à 10000 Code PL/SQL declare cursor c is select * from produits; depassement exception; begin for e in c loop if e.prix > 10000 then raise depassement;end if; end loop; exception when depassement then dbms_output.put_line('prix élevé'); end; 2010/2011 BD - PL/SQL 42

D. Exceptions prédéfinies (1) ZERO_DIVIDE Division par 0 INVALID_CURSOR Tentative d accès à un curseur non ouvert INVALID_NUMBER Utilisation d un type non numérique dans un contexte où un nombre est requis NO_DATA_FOUND SELECT... INTO ne retourne aucun résultat 2010/2011 BD - PL/SQL 43

D. Exceptions prédéfinies (2) NOT_LOGGED_ON Tentative d exécution d opération SQL sans être connecté à Oracle STORAGE_ERROR Erreur de stockage VALUE_ERROR Erreur de conversion arithmétique, troncature, contrainte de taille, etc. Etc. 2010/2011 BD - PL/SQL 44

Plan I. Vue d ensemble et principes de fonctionnement II. Eléments de programmation III. Curseurs IV. Exceptions V. Procédures et fonctions A. Définition B. Déclaration de procédure C. Exemple de procédure D. Déclaration de fonction E. Exemple de fonction VI. Paquetages VII.Triggers 2010/2011 BD - PL/SQL 45

A. Définition Définition Code PL/SQL Stocké dans la base Appelable par les couches supérieures depuis Bloc PL/SQL SQL*Plus 2010/2011 BD - PL/SQL 46

B. Déclaration de procédure Syntaxe create [or replace] p (x1 in out t1, x2...,...) as -- Déclarations begin -- Corps [ exception ] -- Gestion des exceptions end; 2010/2011 BD - PL/SQL 47

C. Exemple de procédure Déclaration create procedure supprimer (num in char) as begin delete... where... num... ;... end; Appel sous SQL*Plus SQL> execute supprimer('w'); Appel depuis PL/SQL declare x char; begin... supprimer(x);... end; 2010/2011 BD - PL/SQL 48

D. Déclaration de fonction Syntaxe create [or replace] f (x1 in out t1,...) return <type> as -- Déclarations begin -- Corps [exception] -- Gestion des exceptions end; 2010/2011 BD - PL/SQL 49

E. Exemple de fonction Exemple Ecrire la fonction factorielle Code PL/SQL create function fact (n in integer) return integer as begin if n = 0 then return 1; else return n * fact(n 1); end if; end; 2010/2011 BD - PL/SQL 50

Plan I. Vue d ensemble et principes de fonctionnement II. Eléments de programmation III. Curseurs IV. Exceptions V. Procédures et fonctions VI. Paquetages A. Définition B. Déclaration VII.Triggers 2010/2011 BD - PL/SQL 51

A. Définition Définition Ensemble de procédures et fonctions Composition Deux parties En-tête Corps 2010/2011 BD - PL/SQL 52

B. Déclaration (1) Syntaxe create package <nompaquetage> as procedure <nomprocédure1> (...); procedure <nomprocédure2> (...); function <nomfonction> (...) type; end; create package body <nompaquetage> as procedure <nomprocédure1> (...) begin... end; procedure <nomprocédure2> (...) begin... end; function <nomfonction> (...) begin... end; end; 2010/2011 BD - PL/SQL 53

B. Déclaration (2) Exemple create package Hello as procedure Hello1; procedure Hello2; end; create package body Hello as procedure Hello1 begin dbms_output.put_line('hello1') end; procedure Hello2 begin dbms_output.put_line('hello2') end; end; 2010/2011 BD - PL/SQL 54

Plan I. Vue d ensemble et principes de fonctionnement II. Eléments de programmation III. Curseurs IV. Exceptions V. Procédures et fonctions VI. Paquetages VII.Triggers A. Définition B. Déclaration 2010/2011 BD - PL/SQL 55

A. Définition Traduction Déclencheur Définition Bloc PL/SQL Associé à une table Exécuté lors d'un ordre LMD sur cette table 2010/2011 BD - PL/SQL 56

B. Déclaration (1) Syntaxe create [or replace] trigger <nom> before after insert update [of <nom_attribut>] delete insert or delete... or... on <table> [for each row] [when (...)] -- bloc PL/SQL 2010/2011 BD - PL/SQL 57

B. Déclaration (2) Exemple Notifier la suppression d un client (de la table Clients) avant l exécution de l opération Code PL/SQL create trigger avant_suppression before delete on Clients begin dbms_output.put_line('suppression d un client'); end; 2010/2011 BD - PL/SQL 58

Bibliographie M.C. Fauvet, Database course, Université Joseph Fourier, Grenoble E. Waller, Database course, Ecole Polytechnique, Paris, 2007/2008 2010/2011 BD - PL/SQL 59