Le Langage de BLOC PL/SQL

Slides:



Advertisements
Présentations similaires
PL/SQL : Le Langage PL/SQL est une extension du SQL, qui offre
Advertisements

Les Systèmes de Gestion de Bases de Données (SGBD) PL-SQL.
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
Gestion de FICHIERS.
PHP mySQL Extension php_mysql. Connexion à une base de données Établir une connexion mysql_connect(string server, string username, string password) –permet.
Programmation dapplication INT. 2 Bases de Données Plan du document Contexteslide 1 Programmer avec une BDslide 2 Client-Serveur SQL et architecture 3.
Oracle: OO.
Programme Introduction aux BD et aux SGBD Le modèle relationnel
LE LANGAGE SQL : LDD La création de tables L’ordre CREATE CREATE TABLE nom_de_table (Nom_colonne Type_colonne, Nom_colonne Type_colonne,
LMD: Langage de Manipulation de Données
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
L’utilisation des bases de données
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre.
T ECHNOLOGIES O RACLE Manipulation des données © sebvita.com.
Les instructions PHP pour l'accès à une base de données MySql
SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
Gestion des erreurs Packages ©Alain Villeneuve, 1999
P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD.
PL / SQL Schedule: Timing Topic 45 minutes Lecture 30 minutes Practice
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 Procédures stockées CPI-SQLServer.
PLSQL ORACLE 8i Connecter VB à BD Oracle Les collections Question de révision Les blocs anonymes Les triggers REVISION Par : Joël Huot.
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
1 PHP 1.Langage PHP 1.1. Types de base, variables et constantes 1.2. Opérateurs et expressions 1.3. Instructions 1.4. Fonctions 2.Accès aux bases de données:
IFT 6800 Atelier en Technologies d’information
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
Bases de Données Avancées - TP2: SQL
Chapitre 9 Les sous-programmes.
PL/SQL Noreddine GHERABI 1.
Christine Bonnet SOURCES : « Samples » dOracle, « Oracle 8 » R. Chapuis PRO*C – C ++
Les transactions.
Procédures Stockées Schedule: Timing Topic 60 minutes Lecture
Animateur : Med HAIJOUBI
PHP & My SQL.
IUPm3- Université de Nantes
 CREATE TABLE  DROP TABLE  ALTER TABLE  INSERT  UPDATE  DELETE  SELECT interrogation 2 Instruction de mise à jour structure.
Packages et Types De la Spécification Formelle A l'implémentation Ada.
JDBC L'API JDBC est utilisée pour utilisée pour intéragir avec une base de données.
Les Composants de l’architecture Oracle
Chapitre 6.2 Les curseurs Cours SGBD 3A Mme hkimi Jihène
Créer des packages.
Module 12 : Implémentation de procédures stockées.
Un survol du language C.
Packages fournis par Oracle
 Syntaxe du langage PHP
 Requêtes MySQL en PHP Introduction
(Procedural Language / Structured Query Language)
1 PHP 5 Notions fondamentales (cours #5) Formation continue – Cégep de Sainte-Foy.
6 Copyright © Oracle Corporation, Tous droits réservés. Autres concepts relatifs aux packages.
Cours LCS N°4 Présenté par Mr: LALLALI
 Formulaires HTML : traiter les entrées utilisateur
Introduction  Langage propre à Oracle basé sur ADA  Offre une extension procédurale à SQL  PL/SQL permet d’utiliser un sous-ensemble du langage SQL.
Révision du langage PL/SQL
3 Copyright © Oracle Corporation, Tous droits réservés. Créer des fonctions.
02/06/2015© Robert Godin. Tous droits réservés.1 5 Interface entre SQL et un programme n SQL incomplet n Défaut d'impédance (impedance mismatch) – modèle.
 L’information est conservée sous forme de tables  Contient: ◦ Un nom ◦ Une clé primaire ◦ Une liste de colonnes ◦ Les informations/données (sous forme.
PL/SQL Présentation.
Note: Les nombres écrits en gras renvoie à des leçons entières. Symbole %FOUND 6-13 %ISOPEN 6-13 %NOTFOUND 6-13 %ROWCOUNT 6-13 %ROWTYPE 5, 6-17 %TYPE 1-20.
Procédures Stockées Fonctions Paquetages
Le Langage de Manipulation de Données LMD. 2 Les ordres SQL de manipulation INSERT –Insertion (ajout) de ligne(s) dans une table –Utiliser SQL*LOAD pour.
CHAPITRE 4 PL/SQL Langage SQL en mode procédural (PL/SQL):
Types de données composites
Nicolas Ribot Introduction aux triggers Nicolas Ribot - Licence GNU FDL - Version 1.1.
Introduction au langage PL/SQL
Les exceptions Une exception est un identificateur PL/SQL détecté pendant la phase d’exécution. Comment est-elle déclenchée ? À la suite d’une erreur.
APP-TSWD Apprentissage Par Problèmes Techniques des Sites Web Dynamiques Licence Professionnelle FNEPI Valérie Bellynck, Benjamin Brichet-Billet, Mazen.
1 Les bases de données Séance 5 -- Le Langage de Définition de Données ou la manœuvre de la structure de la base -- Le Langage de Manœuvre de Données.
Transcription de la présentation:

Le Langage de BLOC PL/SQL

Le Langage de Bloc PL/SQL # SQL SQL : langage ensembliste Ensemble de requêtes distinctes Langage de 4ème génération : on décrit le résultat sans dire comment il faut accéder aux données Obtention de certains résultats : encapsulation dans un langage hôte de 3ème génération PL/SQL ‘Procédural Language’ : sur-couche procédurale à SQL, boucles, contrôles, affectations, exceptions, …. Chaque programme est un bloc (BEGIN – END) Programmation adaptée pour : Transactions Une architecture Client - Serveur Michel Tuffery

Requêtes SQL Chaque requête ‘client’ est transmise au serveur de données pour être exécutée avec retour de résultats CLIENT SERVEUR Exécute INSERT INSERT INTO … Résultat DELETE FROM … Exécute DELETE Résultat UPDATE … Exécute UPDATE Résultat SELECT … Exécute SELECT ……. Résultat Michel Tuffery

Bloc PL/SQL Le bloc de requêtes est envoyé sur le serveur. Celui-ci exécute le bloc et renvoie 1 résultat final. CLIENT SERVEUR BEGIN INSERT … SI …. ALORS SELECT … FSI END; Exécution du bloc PL/SQL Résultat Michel Tuffery

Format d’un bloc PL/SQL Section DECLARE : déclaration de Variables locales simples Variables tableaux cursors Section BEGIN Section des ordres exécutables Ordres SQL Ordres PL Section EXCEPTION Réception en cas d’erreur Exceptions SQL ou utilisateur DECLARE --déclarations BEGIN --exécutions EXCEPTION --erreurs END; / Michel Tuffery

Variables simples Variables de type SQL nbr NUMBER(2) ; Variables de type booléen (TRUE, FALSE, NULL) nbr NUMBER(2) ; nom VARCHAR(30) ; minimum CONSTANT INTEGER := 5 ; salaire NUMBER(8,2) ; debut NUMBER NOT NULL ; fin BOOLEAN ; reponse BOOLEAN DEFAULT TRUE ; ok BOOLEAN := TRUE;  Michel Tuffery

Variables faisant référence au dictionnaire de données Référence à une colonne (table, vue) Référence à une ligne (table, vue) Variable de type ‘struct’ Contenu d’une variable : variable.colonne vsalaire  employe.salaire%TYPE; vnom etudiant.nom%TYPE; Vcomm vsalaire%TYPE; vemploye  employe%ROWTYPE; vetudiant etudiant%ROWTYPE; vemploye.adresse Michel Tuffery

Tableaux dynamiques Déclaration d’un type tableau Affectation (héritage) de ce type à une variable Utilisation dans la section BEGIN : un élément du tableau : TYPE <nom du type du tableau> IS TABLE OF <type de l’élément> INDEX BY BINARY_INTEGER; <nom élément> <nom du type du tableau>; <nom élément>(rang dans le tableau) Michel Tuffery

Tableaux dynamiques variables simples Déclaration d’un tableau avec des éléments numériques Déclaration d’un tableau avec des éléments caractères TYPE type_note_tab IS TABLE OF NUMBER(4,2) INDEX BY BINARY_INTEGER; tab_notes type_note_tab; i NUMBER; i:=1; tab_notes(i) := 12.5; TYPE type_nom_tab IS TABLE OF VARCHAR(30) INDEX BY BINARY_INTEGER; tab_noms type_nom_tab; i NUMBER; i:=1; tab_noms(i):= 'toto'; Michel Tuffery

Tableaux dynamiques variables simples avec héritage Tableau avec éléments hérités TYPE type_note_tab IS TABLE OF partiel.note%TYPE INDEX BY BINARY_INTEGER; tab_notes type_note_tab; i NUMBER; i:=1; tab_notes(i) := 12.5; TYPE type_nom_tab IS TABLE OF etudiant.nom%TYPE INDEX BY BINARY_INTEGER; tab_noms type_nom_tab; i NUMBER; i:=1; tab_noms(i):= 'toto'; Michel Tuffery

Tableaux dynamiques avec des éléments de type RECORD Type RECORD : plusieurs variables dans un élément TYPE type_emp_record (idEmp NUMBER, nomEmp VARCHAR(30), adrEmp VARCHAR(80)); i:=1; tab_emps(i).idEmp:= 100; tab_emps(i).nomEmp:= 'toto'; tab_emps(i).adrEmp:= 'tlse'; TYPE type_emp_tab IS TABLE OF type_emp_record INDEX BY BINARY_INTEGER; tab_emps type_emp_tab; i NUMBER; Michel Tuffery

Tableaux dynamiques avec des éléments de type ROW Type ROW : chaque élément est une variable ‘struct’ TYPE type_emp_tab IS TABLE OF employe%ROWTYPE INDEX BY BINARY_INTEGER; tab_emps type_emp_tab; i NUMBER; i:=1; tab_emps(i).idE:= 100; tab_emps(i).nom:= 'toto'; tab_emps(i).adresse:= 'tlse'; Michel Tuffery

Variables paramétrées lues sous SQLPLUS : & Variables lues par un ACCEPT …. PROMPT ACCEPT plu PROMPT 'Entrer la valeur : ' DECLARE -- déclarations BEGIN -- travail avec le contenu de plu : -- &plu si numérique -- '&plu' si caractère END; / -- Ordre SQL ..... + PL + Michel Tuffery

Variables en sortie sous SQLPLUS : : Variable déclarée sous sqlplus , utilisée dans le bloc PL puis affichée sous sqlplus VARIABLE i NUMBER BEGIN :i := 15; END; / PRINT i + SQL> print i I ---------- 15 PL + Michel Tuffery

Instructions PL Affectation (:=) A := B; Structure alternative ou conditionnelle Opérateurs SQL : >,<,….,OR,AND,….,BETWEEN,LIKE,IN IF …. THEN ….. ELSE ……END IF; IF condition THEN instructions; ELSE IF condition THEN instructions; ELSIF condition THEN instructions; ELSE instructions; END IF; Michel Tuffery

Structure alternative : CASE (1) Choix selon la valeur d’une variable CASE variable WHEN valeur1 THEN action1; WHEN valeur2 THEN action2; ……… ELSE action; END CASE; Michel Tuffery

Structure alternative : CASE (2) Plusieurs choix possibles CASE WHEN expression1 THEN action1; WHEN expression2 THEN action2; ……… ELSE action; END CASE; Michel Tuffery

Structure itérative LOOP FOR WHILE LOOP instructions; EXIT WHEN (condition); END LOOP; LOOP FOR WHILE FOR (indice IN [REVERSE] borne1..borne2) LOOP instructions; END LOOP; WHILE (condition) LOOP instructions; END LOOP; Michel Tuffery

Affichage de résultats intermédiaires Package DBMS_OUTPUT Messages enregistrés dans une mémoire tampon côté serveur La mémoire tampon est affichée sur le poste client à la fin Serveur ORACLE Client SQLPLUS BEGIN DBMS_OUTPUT.PUT_LINE('Message1'); DBMS_OUTPUT.PUT_LINE('Message2'); DBMS_OUTPUT.PUT_LINE('Message3'); END; Message1 Message2 Message3 à la fin Message1 Message2 Message3 SQL>SET SERVEROUT ON Mémoire tampon Michel Tuffery

Le package DBMS_OUTPUT Écriture dans le buffer avec saut de ligne DBMS_OUTPUT.PUT_LINE(<chaîne caractères>); Écriture dans le buffer sans saut de ligne DBMS_OUTPUT.PUT(<chaîne caractères>); Écriture dans le buffer d’un saut de ligne DBMS_OUTPUT.NEW_LINE; DBMS_OUTPUT.PUT_LINE('Affichage des n premiers '); DBMS_OUTPUT.PUT_LINE('caractères en ligne '); FOR i IN 1..n LOOP DBMS_OUTPUT.PUT(tab_cars(i)); END LOOP; DBMS_OUTPUT.NEW_LINE; Michel Tuffery

Sélection mono – ligne SELECT …. INTO Toute valeur de colonne est rangée dans une variable avec INTO Variable ROWTYPE SELECT nom,adresse,tel INTO vnom,vadresse,vtel FROM etudiant WHERE ine=&nolu; SELECT nom,adresse,libDip INTO vnom,vadresse,vdip FROM etudiant e, diplôme d WHERE ine=&nolu AND e.idDip=d.idDip; SELECT * INTO vretud FROM etudiant WHERE ine=&nolu; ………… DBMS_OUTPUT.PUT_LINE('Nom étudiant : '||vretud.nom); Michel Tuffery

Sélection multi – ligne : les CURSEURS Principe des curseurs Obligatoire pour sélectionner plusieurs lignes Zone mémoire (SGA : Share Global Area) partagée pour stocker les résultats Le curseur contient en permanence l’@ de la ligne courante Curseur implicite SELECT t.* FROM table t WHERE …… t est un curseur utilisé par SQL Curseur explicite DECLARE CURSOR  Michel Tuffery

Démarche générale des curseurs Déclaration du curseur : DECLARE Ordre SQL sans exécution Ouverture du curseur : OPEN SQL ‘monte‘ les lignes sélectionnées en SGA Verrouillage préventif possible (voir + loin) Sélection d’une ligne : FETCH Chaque FETCH ramène une ligne dans le programme client Tant que ligne en SGA : FETCH Fermeture du curseur : CLOSE Récupération de l’espace mémoire en SGA Michel Tuffery

Traitement d’un curseur Programme PL/SQL SGA FETCH variables DECLARE CURSOR c1 IS SELECT ……; BEGIN OPEN c1; FETCH c1 INTO ………; WHILE (c1%FOUND) LOOP ……… END LOOP; CLOSE c1; END; OPEN BD Michel Tuffery

Gestion ‘classique’ d’un curseur DECLARE CURSOR c1 IS SELECT nom,moyenne FROM etudiant ORDER BY 1; vnom etudiant.nom%TYPE; vmoyenne etudiant.moyenne%TYPE; e1 ,e2 NUMBER; BEGIN OPEN c1; FETCH c1 INTO vnom,vmoyenne; WHILE c1%FOUND LOOP IF vmoyenne < 10 THEN e1:=e1+1; INSERT INTO liste_refus VALUES(vnom); ELSE e2:=e2+1; INSERT INTO liste_recus VALUES(vnom); END IF; END LOOP; CLOSE c1; DBMS_OUTPUT.PUT_LINE(TO_CHAR(e2)||'Reçus '); DBMS_OUTPUT.PUT_LINE(TO_CHAR(e1)||'Collés '); COMMIT; END; Michel Tuffery

Les variables système des Curseurs Curseur%FOUND Variable booléenne Curseur toujours ‘ouvert’ (encore des lignes) Curseur%NOTFOUND Opposé au précédent Curseur ‘fermé’ (plus de lignes) Curseur%COUNT Variable number Nombre de lignes déjà retournées Curseur%ISOPEN Booléen : curseur ouvert ? Michel Tuffery

Gestion ‘automatique’ des curseurs DECLARE CURSOR c1 IS SELECT nom,moyenne FROM etudiant ORDER BY 1; -- PAS DE DECLARATION DE VARIABLE DE RECEPTION e1 ,e2 NUMBER; BEGIN --PAS D’OUVERTURE DE CURSEUR --PAS DE FETCH FOR c1_ligne IN c1 LOOP IF c1_ligne.moyenne < 10 THEN e1:=e1+1; INSERT INTO liste_refus VALUES(c1_ligne.nom); ELSE e2:=e2+1; END IF; END LOOP; --PAS DE CLOSE DBMS_OUTPUT.PUT_LINE(TO_CHAR(e2)||'Reçus '); DBMS_OUTPUT.PUT_LINE(TO_CHAR(e1)||'Collés '); COMMIT; END; Variable STRUCT de réception Michel Tuffery

Curseurs et Tableaux exemple final DECLARE CURSOR c1 IS SELECT nom,moyenne FROM etudiant WHERE moyenne>=10 ORDER BY 2 DESC; TYPE type_nom_tab IS TABLE OF etudiant.nom%TYPE INDEX BY BINARY_INTEGER; tab_noms type_nom_tab; i,j NUMBER; BEGIN /* Remplissage tableau */ i:=1; FOR c1_ligne IN c1 LOOP tab_noms(i):= c1.ligne.nom; i:=i+1; END LOOP; /* Affichage du tableau */ FOR j IN 1..i-1 LOOP DBMS_OUTPUT.PUT_LINE('Rang : '||TO_CHAR(j)|| 'Etudiant : '||tab_nom(j)); END LOOP; END; Michel Tuffery

Gestion des Exceptions Principe Toute erreur (SQL ou applicative) entraîne automatiquement un débranchement vers le paragraphe EXCEPTION : Débranchement involontaire (erreur SQL) ou volontaire (erreur applicative) BEGIN instruction1; instruction2; …… instructionn; EXCEPTION WHEN exception1 THEN ……… WHEN exception2 THEN WHEN OTHERS THEN END; Michel Tuffery

Deux types d’exceptions Exceptions SQL Déjà définies (pas de déclaration) DUP_VAL_ON_INDEX NO_DATA_FOUND OTHERS Non définies Déclaration obligatoire avec le n° erreur (sqlcode) Exceptions applicatives Déclaration sans n° erreur nomerreur EXCEPTION; PRAGMA EXCEPTION_INIT(nomerreur,n°erreur); nomerreur EXCEPTION; Michel Tuffery

Exemple de gestion d’exception (2) DECLARE enfant_sans_parent EXCEPTION; PRAGMA EXCEPTION_INIT(enfant_sans_parent,-2291); BEGIN INSERT INTO fils VALUES ( ……. ); EXCEPTION WHEN enfant_sans_parent THEN ……… WHEN OTHERS THEN END; Michel Tuffery