PL/SQL Noreddine GHERABI 1.

Slides:



Advertisements
Présentations similaires
[number 1-100].
Advertisements

Premier programme en C :
PL/SQL : Le Langage PL/SQL est une extension du SQL, qui offre
Les Systèmes de Gestion de Bases de Données (SGBD) PL-SQL.
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
SQL - Subtilités.
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.
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Les fonctions.
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,
Les requêtes La Requête est une méthode pour afficher les enregistrements qui répondent à des conditions spécifiques. La requête est donc un filtre.
Développement d’applications web
CPI/BTS 2 Programmation Web Introduction au PHP
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
Les éléments de base de l’algorithmique
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
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.
SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]
Programmation multimédia 3
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.
Principes de programmation
SQL: Contraintes et Triggers
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
Manipulation des données Requêtes simples
Christine Bonnet SOURCES : « Samples » dOracle, « Oracle 8 » R. Chapuis PRO*C – C ++
Les transactions.
Procédures Stockées Schedule: Timing Topic 60 minutes Lecture
Les Opérateurs Ils régissent toutes les opérations ou transformations sur les valeurs des variables. Opérateur d'affectation Opérateurs arithmétiques Opérateurs.
Limiter et trier des données
Introduction.
PHP & My SQL.
 CREATE TABLE  DROP TABLE  ALTER TABLE  INSERT  UPDATE  DELETE  SELECT interrogation 2 Instruction de mise à jour structure.
LES PILES ET FILES.
Cours n°4M2. ESCE (S. Sidhom) Séminaire ( 6-12 Février 2007 ) Promo. M2 ESCE-Tunis 2006/07 Conception d’un système d'information sur Internet Architecture.
Le Langage de BLOC PL/SQL
Algorithmique et programmation en
Chapitre 6.2 Les curseurs Cours SGBD 3A Mme hkimi Jihène
Créer des packages.
Un survol du language C.
 Syntaxe du langage PHP
(Procedural Language / Structured Query Language)
Manipulation des Données
6 Copyright © Oracle Corporation, Tous droits réservés. Autres concepts relatifs aux packages.
Sélection de colonnes (la projection)
21/04/2015© Robert Godin. Tous droits réservés.1 6Gestion des contraintes d’intégrité en SQL n Contrainte d'intégrité statique – respectée pour chacun.
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
Initiation au web dynamique Licence Professionnelle.
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.
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.
Le langage SQL.
Philippe Gandy - 8 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
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.
Le Langage de Manipulation de Données LMD Module 6.
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:

PL/SQL Noreddine GHERABI 1

Introduction 􀂉 PL/SQL est un langage propriétaire de Oracle Pourquoi PL/SQL ? 􀂉 SQL est un langage non procédural. 􀂉 Les traitements complexes sont parfois difficiles à écrire si on ne peut utiliser des variables et les structures de programmation comme les boucles et les alternatives Utilisation de PL/SQL 􀂉 PL/SQL peut être utilisé pour l’écriture des procédures stockées et des triggers (Oracle accepte aussi le langage Java) 􀂉 Il convient aussi pour écrire des fonctions utilisateurs qui peuvent être utilisées dans les requêtes SQL (en plus des fonctions prédéfinies) 􀂉 Il est aussi utilisé dans des outils Oracle, Forms et Report en particulier 􀂉 PL/SQL est un langage propriétaire de Oracle 2

Structure d’un programme Un programme est structuré en blocs d’instructions de 3 types : procédures anonymes procédures nommées fonctions nommées DECLARE -- définitions de variables BEGIN -- Les instructions à exécuter EXCEPTION -- La récupération des erreurs END; 3

Variables 􀂉 Identificateurs Oracle : 30 caractères au plus Commence par une lettre Peut contenir lettres, chiffres, _, $ et # Pas sensible à la casse 􀂉 Types de variables Les types habituels correspondants aux types SQL2 , Oracle : integer, varchar,… Types composites adaptés à la récupération des colonnes et lignes des tables SQL :%TYPE, %ROWTYPE 4

Variables 􀂉 Déclaration d’une variable identificateur [CONSTANT] type [:= valeur]; Exemples : age integer:=20; nom varchar(30); dateNaissance date; ok boolean := true; PI CONSTANT REAL:=500; Déclarations multiples interdites : On peut déclarer qu’une variable est du même type qu’une colonne d’une table (ou qu’une autre variable) : NC client.nom.%TYPE; Age number; Age1 age%type; 5

Variables 􀂉 Une variable peut contenir toutes les colonnes d’une ligne d’une table employe emp%ROWTYPE; déclare que la variable employe contiendra une ligne de la table emp Exemple d’utilisation nom emp.nome%TYPE; select * INTO employe from emp where matr = 900; nom := employe.nome; employe.dept := 20; … insert into emp values employe; 6

Opérateurs Arithmétique +, -, *, /, ** Concaténation || Parenthèse pour contrôler les priorités des opérations (, ) Affectation := Comparaison =, <>, <, >, <=, >=, IS NULL, LIKE, BETWEEN, IN Logique AND, OR, NOT Conversion de types 7

Conversions de types de données Les mélanges de types provoquent des erreurs affectent les performances Fonctions de conversion : TO_CHAR TO_DATE TO_NUMBER Exemple : V := USER || ‘: ’ || DATE ; -- Types incompatibles V := USER || ‘: ’ || TO_CHAR(SYSDATE) ; -- ok 8

Blocks imbriqués et portée des variables (Exemple) DECLARE poids_v NUMBER(3) := 600 ; message_v VARCHAR2(255) := ‘Produit 10012’ ; BEGIN DECLARE poids_v NUMBER(3) := 1 ; message_v VARCHAR2(255) := ‘Produit 11001’ ; pays_v VARCHAR2(50) := ‘Europe’ ; poids_v := poids_v +1 ; pays_v := ‘Ouest- ’ || pays_v ; END ; message_v := mesage_v || ‘ est en stock’ ; 9

Blocks imbriqués et portée des variables DECLARE variable1_v NUMBER(3) := 10 ; BEGIN variable2_v NUMBER(3) := 10 ; END; variable1_v variable1_v variable2_v variable1_v 10

Blocks imbriqués et portée des variables DECLARE variable1_v NUMBER(3) := 10 ; BEGIN variable1_v NUMBER(3) := 200 ; END; variable1_v (10) variable1_v (200) variable1_v (10) 11

Blocks imbriqués et portée des variables DECLARE poids_v NUMBER(3) := 600 ; message_v VARCHAR2(255) := ‘Produit 10012’ ; BEGIN DECLARE poids_v NUMBER(3) := 1 ; -- (poids_v =1) message_v VARCHAR2(255) := ‘Produit 11001’ ; pays_v VARCHAR2(50) := ‘Europe’ ; poids_v := poids_v +1 ; -- (poids_v = 2) pays_v := ‘Ouest- ’ || pays_v ; END ; poids_v := poids_v +1 ; -- (poids_v = 601) message_v := mesage_v || ‘ est en stock’ ; -- (message_v = ‘Produit 10012 est en stock’) pays_v := ‘Ouest- ’ || pays_v ; -- ILLEGAL 12

Exercices 13

Structures de contrôle Branchements conditionnels IF - THEN - END IF IF - THEN - ELSE - END IF IF - THEN - ELSIF - END IF Boucles LOOP - END LOOP FOR - END LOOP WHILE - END LOOP Note : la commande EXIT permet de sortir de tout type de boucle Exit when : permet de sortir de la boucle selon une condition 14

Structures de contrôle - branchements conditionnels Syntaxe : IF <condition> THEN commandes ; [ELSIF <condition> THEN commandes ; ]* [ELSE commandes ; ] END IF ; Note : vous pouvez utiliser l’expression IS NULL dans les conditions Exemples : IF nomEmploye_v = ‘TOTO’ THEN salaire_v := salaire_v * 2 ; END IF; 15

Structures de contrôle - branchements conditionnels IF nomEmploye_v = ‘TOTO’ THEN salaire_v := salaire_v * 2 ; ELSE salaire_v := salaire_v * 3 ; END IF; ELSIF salaire_v > 10000 THEN salaire_v := salaire_v / 2 ; 16

Exercices 1- Ecrire un programme pl/sql qui calcule la somme, le produit de deux variables. 2- Ecrire un code pl/Sql qui permet de tester le signe d’une variable A ( s’elle est positive elle reçoive -1 sinon elle reçoive +1). 3- Ecrire un code pl/sql qui donne une appréciation sur une note s’elle est <10 le programme donne a une variable de chaine de caractères la valeur ‘mal’ s’elle est > a 10 et <12 il lui donne la valeur ‘assez bien’ sinon ‘Bien’ 17

Structures de contrôle - boucles LOOP Note : Sans commande EXIT, les boucles LOOP sont infinies Syntaxe : LOOP commandes ; . . . EXIT [WHEN <condition>] ; END LOOP ; 18

Structures de contrôle - boucles LOOP Exemple : DECLARE noEmp_v NUMBER (3) := 1; BEGIN LOOP INSERT INTO Employe (noEmp, nomEmp, job, noDept) VALUES (noEmp_v, ‘Oracle’, ‘PROGRAMMEUR’, 10) ; noEmp_v := noEmp_v +1 ; EXIT WHEN noEmp > 100 ; END LOOP ; END ; 19

Structures de contrôle - boucles FOR Syntaxe : FOR <compteur> IN <limite_inf> .. <limite_sup> commandes ; . . . END LOOP Exemple : DECLARE noEmp NUMBER (3); BEGIN FOR noEmp IN 1 .. 100 INSERT INTO Employe (noEmp, nomEmp, job, noDept) VALUES (noEmp, ‘Oracle’, ‘PROGRAMMEUR’, 10) ; END LOOP ; END ; 20

Structures de contrôle - boucles WHILE Syntaxe : WHILE <condition> LOOP commandes ; . . . END LOOP ; Exemple : DECLARE noEmp_v NUMBER (3); BEGIN noEmp_v := 1; WHILE noEmp_v <= 100 LOOP INSERT INTO Employe (noEmp, nomEmp, job, noDept) VALUES (noEmp_v, ‘Oracle’, ‘PROGRAMMEUR’, 10) ; noEmp_v := noEmp_v +1 ; END LOOP ; END ; 21

Structures de contrôles - remarques sur les boucles Ne pas modifier le compteur d’une boucle FOR Les boucles peuvent être imbriquées On peut nommer les boucles pour identifier explicitement laquelle de deux boucles imbriquées se termine . . . <<boucleExterne>> LOOP . . . EXIT WHEN compteur_v = 10 ; <<boucleInterne>> LOOP EXIT boucleExterne WHEN compteur_v = 100 ; EXIT boucleInterne WHEN drapeau_v = TRUE ; END LOOP boucleInterne ; END LOOP boucleExterne ; . . . 22

Interactions avec le serveur Oracle Inclure une requête SELECT dans un block PL/SQL Déclarer dynamiquement des variables de type adapté au SELECT Modifier des données dans PL/SQL Contrôler les transactions dans PL/SQL Déterminer le résultat d’une requête SELECT dans PL/SQL 23

Inclure une requête SELECT dans PL/SQL DECLARE noDept_v NUMBER(2) ; lieu_v VARCHAR2(15) ; BEGIN SELECT noDept, lieu INTO noDept_v, lieu_v FROM Departement WHERE nomDept = ‘VENTES’ ; . . . END ; ATTENTION : la requête ne doit retourner que un et un seul tuple !!! Si ce n’est pas le cas, les exceptions NO_DATA_FOUND ou TOO_MANY_ROWS sont levées 24

Déclarer dynamiquement des variables de type adapté au SELECT %TYPE identifie dynamiquement le type d’un attribut d’une table %ROWTYPE identifie dynamiquement le type (structuré) d’un tuple d’une table DECLARE dateCommande_v Commande.dateCommande%TYPE ; uneCommande_v Commande%ROWTYPE ; . . . 25

Exemple : requête SELECT dans PL/SQL DECLARE noDept_v Departement.noDept%TYPE; lieu_v Departement.lieu%TYPE; BEGIN SELECT noDept, lieu INTO noDept_v, lieu_v FROM Departement WHERE nomDept = ‘VENTES’ ; . . . END ; 26

Exemple : requête SELECT dans PL/SQL DECLARE sommeSalaires_v Employe.salaire%TYPE ; noDept_v NUMBER NOT NULL := 10 ; BEGIN SELECT SUM(salaire) INTO sommeSalaires_v FROM Employe WHERE noDepartement = noDept_v ; END ; 27

Modifier des données dans PL/SQL Trois commandes du langage de manipulation de données (LMD) de SQL permettent de modifier une base de données : INSERT UPDATE DELETE 28

Modifier des données dans PL/SQL (INSERT) BEGIN INSERT INTO Employe (noEmp, nomEmp, job, noDept) VALUES (10, ‘Oracle’, ‘PROGRAMMEUR’, 10) ; END ; Note : on peut évidemment utiliser des variables au lieu de simples valeurs prédéfinies. 29

Modifier des données dans PL/SQL (UPDATE) DECLARE majorationSalaire_v Employe.salaire%TYPE := 2000; BEGIN UPDATE Employe SET salaire = salaire + majorationSalaire_v WHERE job = ‘PROGRAMMEUR’ ; END ; Note : contrairement aux affectations PL/SQL, la clause update utilise le signe ‘=‘ comme opérateur d’affectation si une variable a le même nom qu’un nom d’attribut de la table manipulée dans la clause WHERE, le serveur Oracle utilise en priorité l’attribut de table 30

Modifier des données dans PL/SQL (DELETE) DECLARE noDept_v Employe.noDept%TYPE := 10 ; BEGIN DELETE FROM Employe WHERE noDept = noDept_v ; END ; 31

Contrôler les transactions dans PL/SQL La première commande INSERT/UPDATE/DELETE/CREATE/DROP d’un block entamme une nouvelle transaction La fin du block ne termine pas la transaction Pour terminer explicitement une transaction, utiliser les commandes SQL : COMMIT => valide les modifications faites depuis le début de la transaction en cours, et entamme une nouvelle transaction ROLLBACK => annule toutes les modifications faites depuis le début de la transaction en cours , et entamme une nouvelle transaction Note : Une transaction doit être un ensemble homogène de manipulations de la base de données => il faut réflechir à tous les endroits où il est légitime de mettre un COMMIT 32

Contrôler les transactions dans PL/SQL DECLARE noDept_v Employe.noDept%TYPE := 10 ; majorationSalaire_v Employe.salaire%TYPE := 2000; BEGIN DELETE FROM Employe WHERE noDept = noDept_v ; COMMIT ; UPDATE Employe SET salaire = salaire + majorationSalaire_v WHERE job = ‘PROGRAMMEUR’ ; END ; 33

Affichage des données Option : set serveroutput on : cette option permet d’activer l’affichage des données dans l’outil sql*plus Pour afficher un message ou une variable : DBMS_OUTPUT.PUT_LINE(‘message’); 34

Gestion des exceptions traitement des erreurs 35

Gestion des exceptions 36

Gestion des exceptions: Exemple 37

Gestion des curseurs Nécessite l’utilisation de curseurs Les curseurs sont des zones de travail privées; ce sont des zones mémoire utilisées pour analyser et interpréter tout ordre SQL. Deux types de curseurs : les curseurs implicites Le serveur Oracle utilise des curseurs implicites pour exécuter les requêtes SQL les curseurs explicites sont des variables explicitement déclarées par le programmeur 38

Gestion des curseurs Attributs des curseurs: en utilisant les attributs de curseurs, vous pouvez tester le résultat de vos requêtes SQL SQL%ROWCOUNT nombre de tuples affectés par la dernière requête SQL (entier) SQL%FOUND booléen, vaut TRUE si la dernière requête SQL a affecté plus d’un tuple SQL%NOTFOUND booléen, vaut TRUE si la dernière requête SQL n’a affecté aucun tuple SQL%ISOPEN booléen indiquant si le curseur est ouvert ou fermé (par défaut ,les curseurs implicites sont toujours fermés à la fin de la requête) Note : à la place de ‘SQL’, utilisez le nom de votre curseur pour identifier l’état d’un curseur explicite 39

Gestion des curseurs Gestion explicites des curseurs : Déclaration : dans la section DECLARE CURSOR nom_curseur IS ordre_select; Ouverture : dans la section BEGIN .. END OPEN nom_curseur; Assignation des valeurs d'une ligne aux variables réceptrices ou à la structure (souvent dans une boucle) FETCH nom_curseur INTO liste_variables /structure; Fermeture et libération de la place mémoire: CLOSE nom_curseur; 40

Gestion des curseurs DECLARE CURSOR departementVentes_v IS SELECT * FROM Departement WHERE nomDept = ‘VENTES’ ; unDepartement_v Departement%ROWTYPE ; compteur_v number := 0 ; BEGIN OPEN departementVentes_v ; LOOP FETCH departementVentes_v INTO unDepartement_v ; EXIT WHEN departementVentes_v%NOTFOUND ; compteur_v := compteur_v +1 ; END LOOP ; CLOSE departementVentes_v ; END; 41

Exercice 42