Alphorm.com Formation PL/SQL

19 038 vues

Publié le

Formation complète ici:
http://www.alphorm.com/tutoriel/formation-en-ligne-le-langage-pl-sql

Cette formation vous apprendra à comprendre et à maîtriser les différents concepts de développement du langage PL/SQL avec les bases de données Oracle.
Durant cette formation vous apprendrez les bases du langage PL/SQL, à utiliser d'une manière efficace les variables, à utiliser les curseurs et tous les éléments de traitement conditionnel.
Vous apprendrez également à développer et a utiliser les procédures stockées, les fonctions, les packages et les triggers.

Publié dans : Technologie
0 commentaire
4 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
19 038
Sur SlideShare
0
Issues des intégrations
0
Intégrations
10 882
Actions
Partages
0
Téléchargements
594
Commentaires
0
J’aime
4
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Alphorm.com Formation PL/SQL

  1. 1. Le langage PL/SQL Présentation de la formation Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Le langage PL/SQL Noureddine DRISSI Expert consultant bases de données
  2. 2. Plan Le formateur Mes formations sur Alphorm Les objectifs de la formation Le plan de formation Publics concernés Le langage PL/SQL alphorm.com™© Publics concernés Connaissances requises Liens utiles
  3. 3. Le formateur Noureddine DRISSI Expertise dans le domaine des bases de données 15 années d’expérience sur tous les SGBDR du marché (SQL Server, Oracle, Postgresql, Mysql, DB2, MongoDB, SQL, PL/SQL, Transact-SQL) Issue de l’environnement bancaire Le langage PL/SQL alphorm.com™© contact@ordb.fr
  4. 4. Mes formations sur alphorm.com MySQL, Administration (1Z0-883) Oracle Database 11g DBA 1 (1Z0-052) Formation PostgreSQL, La haute disponibilité Le langage PL/SQL alphorm.com™© (1Z0-883) MongoDB, administration (1Z0-052) Formation Administration PostgreSQL Administration SQL Server 2012 (70-462) Le langage SQL La haute disponibilité
  5. 5. Objectifs Maîtriser le langage PL/SQL Utiliser des traitements stockés et des triggers dans les applications Le langage PL/SQL alphorm.com™©
  6. 6. Plan de cours Module 1: Présentation du PL/SQL Module 2: Les variables Module 3: Accès à la base de données et ordres SQL Module 4: Les structures de contrôle Module 5: Les curseurs Le langage PL/SQL alphorm.com™© Module 5: Les curseurs Module 6: Gestion des erreurs Module 7: Les programmes stockés Module 8: Les triggers Module 9: Les packages
  7. 7. Publics concernés Concepteurs Développeurs Toutes les personnes impliquées dans des développements utilisant la base de données Oracle. Le langage PL/SQL alphorm.com™©
  8. 8. Connaissances requises Connaissance du language SQL Notions de programmation Ressource : Formation Le langage SQL sur Alphorm • http://www.alphorm.com/formation/formation-langage-sql Le langage PL/SQL alphorm.com™© • http://www.alphorm.com/formation/formation-langage-sql
  9. 9. Liens utiles Documentation PL/SQL http://docs.oracle.com/cd/B10501_01/appdev.920/a96624/toc.htm http://oracle.developpez.com/cours/#SQL-et-PL-SQL Téléchargement Oracle 11g Express Edition http://www.oracle.com/technetwork/database/database-technologies/express- Le langage PL/SQL alphorm.com™© http://www.oracle.com/technetwork/database/database-technologies/express- edition/downloads/index.html Téléchargement Oracle SQL Developer http://www.oracle.com/technetwork/developer-tools/sql- developer/downloads/index.html
  10. 10. Présentation de l’environnement Le langage PL/SQL alphorm.com™©
  11. 11. L’environnement Présentation de la formation Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum L’environnement Noureddine DRISSI Expert consultant bases de données
  12. 12. Objectifs Configurer l’environnement de travail Vérifier les pré-requis Installer le SGBDR Oracle Database 11g Express Edition Installer Oracle SQL Developer Se connecter au moteur de base de données Oracle Le langage PL/SQL alphorm.com™© Se connecter au moteur de base de données Oracle Créer le shéma facsys (facsysv2.sql)
  13. 13. Les pré-requis Matériel Mémoire • Minimum : - Éditions Express : 512 MO Processeur • Minimum : Le langage PL/SQL alphorm.com™© • Minimum : - Processeur x86 : 1,0 GHz, Processeur x64 : 1,4 GHz - Recommandé : 2,0 GHz ou plus Disque • Minimum : - 5,0 GO disponible
  14. 14. Les pré-requis Logiciels OS • Windows 8 SGBDR et outil • Oracle Database 11g Express Edition Le langage PL/SQL alphorm.com™© • Oracle Database 11g Express Edition http://www.oracle.com/technetwork/database/database-technologies/express- edition/downloads/index.html • Oracle SQL Developer http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html
  15. 15. Le modèle de données (facsys) Le langage PL/SQL alphorm.com™©
  16. 16. Atelier Installation du SGBDR Oracle Database 11g Express Edition Installation de Oracle SQL Developper Connexion à la base de données Création du schéma facsys et test de connexion Le langage PL/SQL alphorm.com™©
  17. 17. Présentation du langage PL/SQL Le langage PL/SQL alphorm.com™©
  18. 18. Les outils de Présentation du langage PL/SQL Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Les outils de développement Noureddine DRISSI Expert consultant bases de données
  19. 19. Objectifs Utiliser Oracle SQL Developer pour développer en PL/SQL Exécuter un programme PL/SQL à partir de sqlplus Le langage PL/SQL alphorm.com™©
  20. 20. Oracle SQL Developer Caractéristiques Auto-formatage des instructions PL/SQL et SQL Inclut un débogueur PL/SQL Permet de naviger dans les objets de bases de données Contient des modèles de code Le langage PL/SQL alphorm.com™© Contient des modèles de code Permet l’exécution de scripts
  21. 21. Le langage PL/SQL Le langage PL/SQL alphorm.com™©
  22. 22. Le langage PL/SQL Présentation du langage PL/SQL Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Le langage PL/SQL Noureddine DRISSI Expert consultant bases de données
  23. 23. Objectifs Connaître la syntaxe du langage PL/SQL Ecrire et exécuter un bloc PL/SQL Exercices pratiques Le langage PL/SQL alphorm.com™©
  24. 24. Le langage PL/SQL PL/SQL = Procedural Language extensions to SQL Langage procédural Les variables Les structures de contrôle et les boucles Les procédures, les fonctions, les triggers et les packages Le langage PL/SQL alphorm.com™© Les procédures, les fonctions, les triggers et les packages Langage structuré en blocs (ensemble d’instructions) Externe (anonyme) ou stocké en base (procédure, fonctions ou triggers) S’intègre dans les outils SQL*FORMS, SQL*PLUS, PRO*C, etc.
  25. 25. Client ORACLE Moteur PL/SQL Architecture PL/SQL BLOC PL/SQL BLOC PL/SQL Instructions procédurales Procédurale Le langage PL/SQL alphorm.com™© Moteur SQL SQLInstructions SQL
  26. 26. Structure d’un programme PL/SQL Se décompose en trois parties [DECLARE] .......... .......... BEGIN .......... La zone DECLARE sert à la déclaration des variables, des constantes, ou des curseurs La zone BEGIN constitue le corps du programme La zone EXCEPTION permet de préciser les actions Le langage PL/SQL alphorm.com™© .......... .......... [EXCEPTION] .......... .......... END ; / La zone EXCEPTION permet de préciser les actions à entreprendre lorsque des erreurs sont rencontrées (pas de référence article trouvée pour une insertion, ...). Le END répond au BEGIN précédent, il marque la fin du script. Le / permet de terminer le bloc PL/SQL
  27. 27. DBMS_OUTPUT Permet d’afficher une chaîne ou le contenu d’une variable SET SERVEROUTPUT ON; BEGIN DBMS_OUTPUT.PUTLINE(<valeur>); END ; / Le langage PL/SQL alphorm.com™© /
  28. 28. Bloc PL/SQL: exercice 1 (sol_exercice1.txt) Créez un bloc PL/SQL qui affiche le texte suivant Créer un programme PL/SQL qui insère une nouvelle catégories (table CATEGORIES) de produit avec les valeurs suivantes: CODE_CAT = 5 et LIBELLE_CAT = "Composants" Bonjour facys: vous êtes sur la plateforme Alphorm le <date_du_jour> Le langage PL/SQL alphorm.com™©
  29. 29. Un peu plus loin dans l’utilisation de PL/SQL Le langage PL/SQL alphorm.com™© PL/SQL
  30. 30. Un peu plus loin dans Présentation du langage PL/SQL Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Un peu plus loin dans l’utilisation du PL/SQL Noureddine DRISSI Expert consultant bases de données
  31. 31. Objectifs Connaîtres les principales caractéristiques du PL/SQL Connaître les directives de compilation d’un bloc PL/SQL Connaître la notion de bloc imbriquée Le langage PL/SQL alphorm.com™©
  32. 32. Rappel: structure d’un bloc PL/SQL [DECLARE] .......... .......... BEGIN .......... .......... [EXCEPTION] Le langage PL/SQL alphorm.com™© [EXCEPTION] .......... .......... END ; /
  33. 33. Limites et fonctionnement Contenu d’un bloc PL/SQL LMD (langage de manipulation de données) LDD (langage de définition des données) est interdit Gestion des transactions Identique à SQL Le langage PL/SQL alphorm.com™© Identique à SQL
  34. 34. Directive PRAGMA Le mot clé PRAGMA Instruction de compilation (non exécutable) Les valeurs possibles EXCEPTION_INIT RESTRICT_REFERENCES Le langage PL/SQL alphorm.com™© RESTRICT_REFERENCES SERIALLY_REUSABLE AUTONOMOUS_TRANSACTION
  35. 35. Les blocs imbriqués [DECLARE] .......... BEGIN .......... [DECLARE] .......... BEGIN .......... Le langage PL/SQL alphorm.com™© [EXCEPTION] .......... .......... END ; / .......... [EXCEPTION] .......... END ; /
  36. 36. Affichage à l’écran [DECLARE] .......... BEGIN dbms_output.put_line ... [EXCEPTION] Le langage PL/SQL alphorm.com™© [EXCEPTION] .......... .......... END ; /
  37. 37. Les variables Le langage PL/SQL alphorm.com™©
  38. 38. Introduction aux variables Les variables Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Introduction aux variables PL/SQL Noureddine DRISSI Expert consultant bases de données
  39. 39. Objectifs Connaître les types de données des variables Déclarer et manipuler des variables en PL/SQL Le langage PL/SQL alphorm.com™©
  40. 40. Déclaration des variables DECLARE .......... .......... BEGIN .......... .......... [EXCEPTION] ICI Nommage d’une variable Longueur <= 30 caractères Composé des lettres A-Z, chiffres de 1-9, « $ », « _ » ou « # » Le langage PL/SQL alphorm.com™© [EXCEPTION] .......... .......... END ; / Doit commencer par une lettre Ne doit pas être un mot réservé
  41. 41. Les types de données PL/SQL Types scalaires BINARY_INTEGER INTEGER NUMBER POSITIVE/NATURAL CHAR LONG VARCHAR ou VARCHAR2 BOOLEAN RAW LONG RAW CLOB BLOB Types composés RECORD TABLE Types numériques Types caractères Types RAW Le langage PL/SQL alphorm.com™© DECIMAL FLOAT INTEGER REAL SMALLLINT BOOLEAN DATE ROWID CLOB UROWID BFILE Types dates Types ROWID Types booléens Types LOB
  42. 42. Conversion de types de données Les types de conversion EXPLICITE • Utilisent des fonctions comme TO_DATE, TO_CHAR, etc. IMPLICITE • Réalisées automatiquement par le moteur PL/SQL Le langage PL/SQL alphorm.com™© • Réalisées automatiquement par le moteur PL/SQL - Evaluation d’expressions - Affectation des variables
  43. 43. Conversion de types de données Evaluation d’expressions NUMBER DATE ROWID Le langage PL/SQL alphorm.com™© BINARY_INTEGER CHAR VARCHAR2 RAW
  44. 44. Conversion de types de données Affectation de variables NUMBER DATE ROWID Le langage PL/SQL alphorm.com™© BINARY_INTEGER CHAR VARCHAR2 RAW
  45. 45. Déclaration de variables Syntaxe <nom_variable> [CONSTANT] TYPE [NOT NULL] [{DEFAULT] | :=} VALEUR]; Le langage PL/SQL alphorm.com™©
  46. 46. Les variables de liaison Le langage PL/SQL alphorm.com™©
  47. 47. Les variables de liaison Les variables Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Les variables de liaison Noureddine DRISSI Expert consultant bases de données
  48. 48. Objectif Savoir utiliser les variables de liaison Le langage PL/SQL alphorm.com™©
  49. 49. Qu’est-ce qu’une variable de liaison ? Permet de socker les entrées utilisateurs De visualiser le contenu d’une variable à travers plusieurs exécution successives de bloc PL/SQL DECLARE .......... BEGIN variable ... Le langage PL/SQL alphorm.com™© BEGIN :variable ... .......... [EXCEPTION] .......... .......... END ; /
  50. 50. La portée des variables Le langage PL/SQL alphorm.com™©
  51. 51. La portée des variables Les variables Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum La portée des variables Noureddine DRISSI Expert consultant bases de données
  52. 52. Objectif Connaître la portée des variables dans un programme PL/SQL Le langage PL/SQL alphorm.com™©
  53. 53. La portée des variables PL/SQL Une variable est accessible dans le bloc dans lequel elle a été déclarée et dans les blocs secondaires (imbriqués) • Si le nom d’une variables déclarée dans le bloc principal est réutilisé dans un bloc secondaire, c’est une nouvelle variable qui est créée Le langage PL/SQL alphorm.com™©
  54. 54. Les autres types de données PL/SQL Le langage PL/SQL alphorm.com™©
  55. 55. Les autres types de données PL/SQL Les variables Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Les autres types de données PL/SQL Noureddine DRISSI Expert consultant bases de données
  56. 56. Objectifs Connaître les autres types de données PL/SQL Types définis par les utilisateurs Types composés • Les enregistrements ou structure • Les tableaux Le langage PL/SQL alphorm.com™© • Les tableaux Les variables basées Créer et utiliser les autres types de données
  57. 57. Les types définis par les utilisateurs Deux types dérivés possibles: Les types bornés Les types non bornés (alias ou synonym d’un type de base) Syntaxe Le langage PL/SQL alphorm.com™© Syntaxe SUBTYPE <nom_type> IS TYPE [ (CONSTRAINT) ] [NOT NULL]
  58. 58. Les structures Une structure c’est quoi ? Type composé Permet de stocker des données structurées = enregistrement Syntaxe de déclaration Le langage PL/SQL alphorm.com™© Syntaxe de déclaration TYPE <nom_type_structure> IS RECORD (<nom_champ1> TYPE [NOT NULL] [:=EXPRESSION1], [, . . . ] ); Syntaxe d’utilisation <nom_enregistrement> <nom_type_structure>
  59. 59. Les tableaux (type composé TABLE) Les tableaux associatifs Syntaxe de déclaration TYPE <nom_type_tableau> IS TABLE OF <type_valeur> [NOT NULL] INDEX BY { PLS_INTEGER | BINARY_INTEGER | VARCHAR2(TAILLE) }; Syntaxe d’utilisation Le langage PL/SQL alphorm.com™© Syntaxe d’utilisation <nom_variable> <nom_type_tableau>
  60. 60. Les tableaux (type composé TABLE) Les tableaux pré-dimensionnés Syntaxe de déclaration TYPE <nom_type_tableau> IS VARRAY(TAILLE) OF <type_valeur> [NOT NULL]; Syntaxe d’utilisation Le langage PL/SQL alphorm.com™© Syntaxe d’utilisation <nom_variable> <nom_type_tableau>
  61. 61. Les tableaux (type composé TABLE) Les actions possibles sur un tableau en PL/SQL EXISTS(n) COUNT FIRST et LAST PRIOR et NEXT (n) Le langage PL/SQL alphorm.com™© PRIOR et NEXT (n) TRIM (n) DELETE (n)
  62. 62. Les variables basées Attribut %TYPE Permet de référencer: une colonne d’une table ou une variable déjà définie Syntaxe de déclaration <nom_variable> {<nom_table.colonne | <nom_variable>}%TYPE; Le langage PL/SQL alphorm.com™© Attribut %ROWTYPE Permet à la variable d’hériter des caractéristiques d’une ligne de table Syntaxe de déclaration <nom_variable> {<nom_table> | <nom_variable>}%ROWTYPE;
  63. 63. Récapitulatif sur les variables PL/SQL et exercices Le langage PL/SQL alphorm.com™© et exercices
  64. 64. Le SELECT dans un bloc PL/SQL Les variables Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Le SELECT dans un bloc PL/SQL Noureddine DRISSI Expert consultant bases de données
  65. 65. Objectif Interroger une bases de données Oracle avec le PL/SQL Le langage PL/SQL alphorm.com™©
  66. 66. Le SELECT INTO Syntaxe SELECT EXPRESSION1 [ , . . . ] INTO VARIABLE1 [ , . . . ] FROM TABLE <nom_table> [ WHERE PREDICAT ] ; Le langage PL/SQL alphorm.com™©
  67. 67. BULK COLLECT Syntaxe SELECT EXPRESSION1 [ , . . . ] BULK COLLECT INTO TABLEAU1 [ , . . . ] FROM TABLE <nom_table> [ WHERE PREDICAT ] ; Le langage PL/SQL alphorm.com™©
  68. 68. Les ordres INSERT, UPDATE et DELETE Le langage PL/SQL alphorm.com™© DELETE
  69. 69. Les ordres INSERT, UPDATE et DELETE Accès à la base de données et ordres SQL Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Les ordres INSERT, UPDATE et DELETE Noureddine DRISSI Expert consultant bases de données
  70. 70. Objectif Mettre à jour les données d’une base avec PL/SQL Le langage PL/SQL alphorm.com™©
  71. 71. La commande INSERT Syntaxe INSERT INTO <nom_table> VALUES <variable_enregistrement> ; Le langage PL/SQL alphorm.com™©
  72. 72. La commande UPDATE Syntaxe UPDATE <nom_table> SET <nom_champ> = <variable_enregistrement> [ WHERE PREDICAT ]; Le langage PL/SQL alphorm.com™©
  73. 73. La commande DELETE Syntaxe DELETE <nom_table> [ WHERE PREDICAT ]; Le langage PL/SQL alphorm.com™©
  74. 74. Attributs des ordres LMD Le langage PL/SQL alphorm.com™©
  75. 75. Attributs des ordres Accès à la base de données et ordres SQL Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Attributs des ordres INSERT, UPDATE et DELETE Noureddine DRISSI Expert consultant bases de données
  76. 76. Objectif Obtenir des informations sur l’exécution des ordres LMD Le langage PL/SQL alphorm.com™©
  77. 77. Les différents attributs SQL%FOUND Type BOOLEAN • Renvoie TRUE si la précédente exécution (INSERT, UPDATE ou DELETE) a modifiéé des enregistrements SQL%NOTFOUND Le langage PL/SQL alphorm.com™© SQL%NOTFOUND Type BOOLEAN • Renvoie TRUE si la précédente exécution (INSERT, UPDATE ou DELETE) n’a modifiéé aucun enregistrement SQL%ROWCOUNT Renvoie le nombre de ligne modifiés par la précédente exécution
  78. 78. Clause SQL RETURNING Fonction Permet de renvoyer les valeurs de champs des enregistrements affectés par les ordres INSERT, UPDATE ou DELETE Limites Inutilisable avec un ordre INSERT qui insère plusieurs enregistrement à partir Le langage PL/SQL alphorm.com™© Inutilisable avec un ordre INSERT qui insère plusieurs enregistrement à partir d’une sous-requête Impossible d’utiliser « * » pour retourner l’ensemble des champs insérées dans l’enregistrement
  79. 79. Récapitulatif sur le LMD avec le langage PL/SQL et exercices Le langage PL/SQL alphorm.com™© langage PL/SQL et exercices
  80. 80. Récapitulatif sur le LMD Accès à la base de données et ordres SQL Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Récapitulatif sur le LMD avec le langage PL/SQL et exercices Noureddine DRISSI Expert consultant bases de données
  81. 81. Objectifs Rappel sur le LMD avec le PL/SQL Exercices pratiques Le langage PL/SQL alphorm.com™©
  82. 82. Ce que nous avons étudiés SELECT INTO BULK COLLECT INTO Insert, update et delete dans un programme PL/SQL Les attributs SQL%FOUND, SQL%NOTFOUND et SQL%ROWCOUNT Le langage PL/SQL alphorm.com™© La clause RETURNING
  83. 83. Le LMD dans PL/SQL: exercice 4 (sol_exercice4.txt) Créez le bloc PL/SQL qui permet d’effectuer les opérations suivantes: Affichez le nom, la fonction, le salaire et la commission du salarié dont la fonction est « Directeur » Affichez le nom, la fonction, le salaire et la comission de tous les salariés Mettez à jour la commission du salarié « Orlando » ( comission = 5000) et affichez la nouvelle valeur inserée Le langage PL/SQL alphorm.com™© Mettez à jour la commission du salarié « Orlando » ( comission = 5000) et affichez la nouvelle valeur inserée Inserez une nouvele categorie (code_cat=77 et libelle_cat= ‘Outillage’ ) puis affichez les valeurs inserées pour la colonne code_cat et libelle_cat
  84. 84. Instructions de contrôle Le langage PL/SQL alphorm.com™©
  85. 85. Traitements conditionnels Les structures de contrôles Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Traitements conditionnels Noureddine DRISSI Expert consultant bases de données
  86. 86. Objectifs Décrire les instructions de contrôle Apprendre à utiliser les traitements conditionnels Le langage PL/SQL alphorm.com™©
  87. 87. IF THEN ELSIF ELSE Syntaxe IF <condition_plsql> THEN <sequence_de_commandes> [ ELSEIF <condition_plsql> THEN <sequence_de_commandes> [ ELSEIF <condition_plsql> THEN <sequence_de_commandes> [ ELSE <sequence_de_commandes> ] Le langage PL/SQL alphorm.com™© [ ELSE <sequence_de_commandes> ] END IF;
  88. 88. Instruction CASE Case simple Syntaxe CASE <expression> WHEN <valeur> THEN <sequence_de_commandes> [ ELSE <sequence_de_commandes> ] Le langage PL/SQL alphorm.com™© [ ELSE <sequence_de_commandes> ] END CASE;
  89. 89. Instruction CASE Case avec recherche Syntaxe CASE WHEN <condition_plsql> THEN <sequence_de_commandes> [ ELSE <sequence_de_commandes> ] Le langage PL/SQL alphorm.com™© [ ELSE <sequence_de_commandes> ] END CASE;
  90. 90. Traitements itératifs Le langage PL/SQL alphorm.com™©
  91. 91. Traitements itératifs Les structures de contrôles Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Traitements itératifs Noureddine DRISSI Expert consultant bases de données
  92. 92. Objectifs Décrire les instructions de contrôle Apprendre à utiliser les traitements itératifs Le langage PL/SQL alphorm.com™©
  93. 93. L’instruction LOOP Permet de répéter une séquence de commandes Syntaxe [ <<nom_boucle>> ] LOOP <commandes_plsql>; Le langage PL/SQL alphorm.com™© <commandes_plsql>; EXIT [ <nom_boucle> ] | EXIT WHEN <condition>; END LOOP;
  94. 94. L’instruction WHILE Permet de répéter une séquence de commandes tant que la condition reste vraie Syntaxe [ <<nom_boucle>> ] WHILE <condition> LOOP Le langage PL/SQL alphorm.com™© WHILE <condition> LOOP <commandes_plsql>; END LOOP [ <nom_boucle> ];
  95. 95. L’instruction FOR Permet de répéter une séquence de commandes une fois pour chaque élément dans l’intervalle délimité par deux expressions Syntaxe [ <<nom_boucle>> ] FOR <indice> IN [ REVERSE ] <borne_inférieure> . . <borne_supérieure>LOOP Le langage PL/SQL alphorm.com™© FOR <indice> IN [ REVERSE ] <borne_inférieure> . . <borne_supérieure>LOOP <commandes_plsql>; END LOOP [ <nom_boucle> ];
  96. 96. Récapitulatif sur les instructions de contrôle et exercices Le langage PL/SQL alphorm.com™© contrôle et exercices
  97. 97. Récapitulatif sur les Les structures de contrôles Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Récapitulatif sur les instructions de contrôle et exercices Noureddine DRISSI Expert consultant bases de données
  98. 98. Objectifs Rappel sur les instructions de contrôle Exercices Le langage PL/SQL alphorm.com™©
  99. 99. Ce que nous avons étudiés IF THEN ELSIF ELSE L’instruction CASE La boucle LOOP La boucle WHILE Le langage PL/SQL alphorm.com™© La boucle FOR
  100. 100. Instructions de contrôle: exercice 5 (sol_exercice5.txt) Créez le bloc PL/SQL qui permet d’effectuer les opérations suivantes: Simuler une augmentation de salaire des salariés de 10% si leur salaire est inférieur à la moyenne des salaires Affichez la liste de tous les articles en utilisant la boucle WHILE et la boucle FOR Le langage PL/SQL alphorm.com™©
  101. 101. Les curseurs Le langage PL/SQL alphorm.com™©
  102. 102. Introduction au curseur Les curseurs Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Introduction au curseur Noureddine DRISSI Expert consultant bases de données
  103. 103. Objectifs Connaître le rôle d’un curseur Connaître les types de curseurs Savoir comment fonctionne un curseur Le langage PL/SQL alphorm.com™©
  104. 104. Un curseur c’est quoi ? Permet de manipuler les données ligne par ligne Permet de contrôler le traitement PL/SQL Le langage PL/SQL alphorm.com™©
  105. 105. Un curseur c’est quoi ? Permet de manipuler les données ligne par ligne Fonctionnement Créer une zone de contexte pour exécuter la commande et stocker les informations Le curseur permet de nommer cette zone de contexte, d’accéder aux Le langage PL/SQL alphorm.com™© Le curseur permet de nommer cette zone de contexte, d’accéder aux informations et éventuellement de contrôler le traitement PL/SQL
  106. 106. Les types de curseurs Curseurs explicites Pour traiter les requêtes multilignes Curseurs implicites Utilisés pour les autres commandes SQL (lorsqu’une requête ne ramène qu’une ligne) Le langage PL/SQL alphorm.com™© qu’une ligne)
  107. 107. Utilisation d’un curseur Les étapes de la vie d’un curseur DECLARATION (DECLARE) OUVERTURE (OPEN) DEFILEMENT DES DONNEES (FETCH) FERMETURE (CLOSE) Le langage PL/SQL alphorm.com™© FERMETURE (CLOSE)
  108. 108. Déclaration, ouverture, traitement des lignes et fermeture d’un curseur Le langage PL/SQL alphorm.com™© des lignes et fermeture d’un curseur
  109. 109. Déclaration, ouverture, Les curseurs Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Déclaration, ouverture, traitement des lignes et fermeture d’un curseur Noureddine DRISSI Expert consultant bases de données
  110. 110. Objectifs Savoir déclarer des curseurs Savoir gérer les curseurs et utiliser les curseurs Le langage PL/SQL alphorm.com™©
  111. 111. Déclaration Consite à nommer un curseur et à lui associer une requête Syntaxe CURSOR <nom_curseur> [ ( <nom_parametre> TYPE [ , . . . ] IS <requête_SQL>; Le langage PL/SQL alphorm.com™©
  112. 112. Ouverture Dès que le curseur est ouvert l’ordre SQL est exécuté Syntaxe OPEN <nom_curseur> [ ( <parametre_entrée [ , . . . ] ) ]; Le langage PL/SQL alphorm.com™©
  113. 113. Traitement des lignes Pour trouver la ligne suivante dans l’ensemble actif de données, on doit défiler le curseur par la commande FETCH Syntaxe FETCH <nom_curseur> { INTO { <nom_variable> | <nom_enregistrement> [ , . . . ] } | BULK COLLECT INTO <variable_enregistrement> }; Le langage PL/SQL alphorm.com™©
  114. 114. Déclaration, ouverture, traitement des lignes et fermeture d’un curseur Le langage PL/SQL alphorm.com™© des lignes et fermeture d’un curseur
  115. 115. Ouverture et fermeture Les curseurs Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Ouverture et fermeture d’un curseur Noureddine DRISSI Expert consultant bases de données
  116. 116. Objectifs Savoir déclarer des curseurs Savoir ouvrir et fermer un curseur Le langage PL/SQL alphorm.com™©
  117. 117. Ouverture Dès que le curseur est ouvert l’ordre SQL est exécuté Syntaxe OPEN <nom_curseur> [ ( <parametre_entrée> [ , . . . ] ) ]; Le langage PL/SQL alphorm.com™©
  118. 118. Fermeture Chaque curseur explicite ouvert doit être fermé Syntaxe CLOSE <nom_curseur> ; Le langage PL/SQL alphorm.com™©
  119. 119. Traitement des lignes d’un curseur Le langage PL/SQL alphorm.com™©
  120. 120. Traitement des lignes d’un Les curseurs Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Traitement des lignes d’un curseur Noureddine DRISSI Expert consultant bases de données
  121. 121. Objectif Savoir traiter les lignes d’un curseur Le langage PL/SQL alphorm.com™©
  122. 122. Traitement des lignes Pour trouver la ligne suivante dans l’ensemble actif de données, on doit défiler le curseur par la commande FETCH Syntaxe FETCH <nom_curseur> { INTO { <nom_variable> | <nom_enregistrement> [ , . . . ] } | BULK COLLECT INTO <variable_enregistrement> }; Le langage PL/SQL alphorm.com™©
  123. 123. Etat d’un curseur Le langage PL/SQL alphorm.com™©
  124. 124. Etat d’un curseur Les curseurs Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Etat d’un curseur Noureddine DRISSI Expert consultant bases de données
  125. 125. Objectif Connaître les différents attributs de statut d’un curseur Le langage PL/SQL alphorm.com™©
  126. 126. Etat d’un curseur Les attributs des curseurs explicites: %FOUND %NOTFOUND %ISOPEN %ROWCOUNT Le langage PL/SQL alphorm.com™© %ROWCOUNT
  127. 127. Mise à jour des lignes d’un curseur Le langage PL/SQL alphorm.com™©
  128. 128. Mise à jour des lignes d’un Les curseurs Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Mise à jour des lignes d’un curseur Noureddine DRISSI Expert consultant bases de données
  129. 129. Objectif Savoir mettre à jour les lignes d’un curseur Le langage PL/SQL alphorm.com™©
  130. 130. Curseurs FOR UPDATE Option FOR UPDATE Permet de verrouiller les enregistrements d’un curseur pour modification Syntaxe CURSOR <nom_curseur> [ ( <nom_parametre> TYPE := <valeur_par_default> [ , . . . ] ) ] IS <requête_SQL> FOR UPDATE [ OF <nom_colonne> [ , . . . ] ] [ { Le langage PL/SQL alphorm.com™© , . . . ] ) ] IS <requête_SQL> FOR UPDATE [ OF <nom_colonne> [ , . . . ] ] [ { NOWAIT | WAIT <nombre_de_secondes> } ];
  131. 131. Utilisation des curseurs avec une boucle Le langage PL/SQL alphorm.com™© boucle
  132. 132. Utilisation des curseurs Les curseurs Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Utilisation des curseurs avec une boucle Noureddine DRISSI Expert consultant bases de données
  133. 133. Objectif Utiliser un curseur avec une boucle Le langage PL/SQL alphorm.com™©
  134. 134. Utilisation d’un curseur avec une boucle Syntaxe FOR <nom_enregistrement> IN <nom_curseur> LOOP <commandes_plsql>; END LOOP; Le langage PL/SQL alphorm.com™©
  135. 135. Les exceptions Le langage PL/SQL alphorm.com™©
  136. 136. Récapitulatif sur les Les curseurs Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Récapitulatif sur les curseurs et exercices Noureddine DRISSI Expert consultant bases de données
  137. 137. Objectifs Rappel sur les curseurs Exercices Le langage PL/SQL alphorm.com™©
  138. 138. Ce que nous avons étudiés DECLARATION (CURSOR) des curseurs OUVERTURE (OPEN) et FERMETURE (CLOSE) des CURSEURS TRAITEMENT DES LIGNES (FETCH) des curseurs Les attributs de statut des curseurs (%FOUND, %NOTFOUND, %ISOPEN et %ROWCOUNT) Le langage PL/SQL alphorm.com™© et %ROWCOUNT) La mise à jour des lignes d’un curseur (FOR UPDATE) Les curseurs et la variante de la boucle FOR
  139. 139. Les curseurs: exercice 6 (sol_exercice6.txt) Créez un bloc PL/SQL qui permet d’afficher toutes les commandes de la table « commandes » à l’aide d’un curseur utilisant la boucle FOR. Créez un bloc PL/SQL qui permet d’afficher le nombre de commandes par client. Le pays de résidence du client sera passé en paramètre (argument) au curseur avec une valeur par défaut. Utilisez la boucle FOR avec votre curseur. Le langage PL/SQL alphorm.com™© avec votre curseur. Créez un bloc PL/SQL qui permet de mettre à jour (à l’aide d’un curseur) la date d’envoi des commandes à la date du jour et l’état de la commande à « TRAITEE » pour les commandes dont la date d’envoi est nul.
  140. 140. Les exceptions Le langage PL/SQL alphorm.com™©
  141. 141. Les types d’exceptions Les exceptions Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Les types d’exceptions Noureddine DRISSI Expert consultant bases de données
  142. 142. Objectif Connaître les types d’exceptions Le langage PL/SQL alphorm.com™©
  143. 143. Les quatre types d’exception Les exceptions systèmes nommées Un nom est attribué aux exceptions par Oracle Déclenchées à la suite d’une erreur PL/SQL ou Oracle Les exceptions utilisateurs nommées Nommées lors de leur déclaration par le développeur Le langage PL/SQL alphorm.com™© Nommées lors de leur déclaration par le développeur Déclenchées à la suite d’erreurs dans le code applicatif Les exceptions système anonymes Non nommées Déclenchées à la suite d’une erreur PL/SQL mais non nommées
  144. 144. Les quatre types d’exception Les exceptions utilisateur anonymes Définies et déclenchées par le développeur Code compris entre - 20 000 et – 20 999 Le langage PL/SQL alphorm.com™©
  145. 145. Création d’une exception dans un bloc PL/SQL Le langage PL/SQL alphorm.com™© bloc PL/SQL
  146. 146. Création d’une exception Les exceptions Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Création d’une exception dans un bloc PL/SQL Noureddine DRISSI Expert consultant bases de données
  147. 147. Objectif Gérer une exception dans un bloc PL/SQL Le langage PL/SQL alphorm.com™©
  148. 148. Création d’une exception Syntaxe DECLARE . . . BEGIN . . . EXCEPTION Le langage PL/SQL alphorm.com™© WHEN <nom_exception> [ OR <nom_exception> . . . ] THEN <instructions_plsql>; . . . [ WHEN OTHERS THEN <instructions_plsql> ; ] END;
  149. 149. Les exceptions prédéfinies Se trouve dans le package STANDARD de PL/SQL Quelques exceptions prédéfinies • NO_DATA_FOUND (ORA-01403 SQLCODE= +100) • CURSOR_ALREADY_OPEN (ORA-6511 SQLCODE= -6511) • ZERO_DIVIDE (ORA-01476 SQLCODE = -1476) Le langage PL/SQL alphorm.com™© • ZERO_DIVIDE (ORA-01476 SQLCODE = -1476) • CASE _NOT_FOUND (ORA-6592 SQLCODE = -6592) • . . .
  150. 150. Les exceptions anonymes Le langage PL/SQL alphorm.com™©
  151. 151. Les exceptions anonymes Les exceptions Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Les exceptions anonymes Noureddine DRISSI Expert consultant bases de données
  152. 152. Objectif Savoir utiliser les exceptions anonymes Le langage PL/SQL alphorm.com™©
  153. 153. Les fonctions SQLCODE et SQLERRM SQLCODE Permet de retrouver le code des exceptions Oracle SQLERRM Permet de retrouver le message des exceptions Oracle Le langage PL/SQL alphorm.com™©
  154. 154. PRAGMA EXCEPTION_INIT Fonction Permet d’associer une exception utilisateur à un code d’erreur Oracle Syntaxe d’utilisation DECLARE <nom_exception> EXCEPTION; Le langage PL/SQL alphorm.com™© <nom_exception> EXCEPTION; PRAGMA EXCEPTION_INIT (<nom_exception>, <code_erreur_oracle>); BEGIN . . . EXCEPTION WHEN <nom_exception> THEN <instructions_plsql>; END;
  155. 155. Les exceptions utilisateurs Le langage PL/SQL alphorm.com™©
  156. 156. Les exceptions utilisateurs Les exceptions Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Les exceptions utilisateurs Noureddine DRISSI Expert consultant bases de données
  157. 157. Objectif Savoir créer et utiliser des exceptions utilisateur Le langage PL/SQL alphorm.com™©
  158. 158. Rôle des exceptions utilisateur Permettent de gérer les erreurs applicatives Le langage PL/SQL alphorm.com™©
  159. 159. Syntaxe DECLARE <nom_exception> EXCEPTION; PRAGMA EXCEPTION_INIT (<nom_exception>, <code_erreur_oracle>); BEGIN . . . Le langage PL/SQL alphorm.com™© . . . RAISE <nom_exception> . . . EXCEPTION WHEN <nom_exception> THEN <instructions_plsql>; END;
  160. 160. RAISE_APPLICATION_ERROR Permet de faire gérer une erreur survenue sur le serveur par un client Le langage PL/SQL alphorm.com™©
  161. 161. La portée des exceptions Quitte le bloc dans lequel il est déclenchée et recherche une exception dans les blocs supérieurs Le langage PL/SQL alphorm.com™©
  162. 162. Récapitulatif sur les exceptions et exercices Le langage PL/SQL alphorm.com™© exercices
  163. 163. Récapitulatif sur les Les exceptions Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Récapitulatif sur les exceptions et exercices Noureddine DRISSI Expert consultant bases de données
  164. 164. Objectifs Récapitulatif sur les exceptions Exercices Le langage PL/SQL alphorm.com™©
  165. 165. Ce que nous avons étudiés Les types d’exceptions La création et le déclenchement d’une exception dans un bloc PL/SQL Les exceptions anonymes Les exceptions utilisateurs Le langage PL/SQL alphorm.com™©
  166. 166. Les exceptions: exercice 7 (sol_exercice7.txt) Créez un bloc PL/SQL qui permet de modifier la comission d’un salarié et qui déclenche une exception si la comission est supérieur au salaire Créez un bloc PL/SQL qui permet de déclencher une exception « ORA- 0292: violation de contrainte (.) d’intégrité ... » lorsque l’on essaye de supprimer un salarié qui a traité des commandes Le langage PL/SQL alphorm.com™©
  167. 167. Les programmes stockés Le langage PL/SQL alphorm.com™©
  168. 168. Les procédures stockées Les programmes stockés Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Les procédures stockées Noureddine DRISSI Expert consultant bases de données
  169. 169. Objectif Créer des procédures Le langage PL/SQL alphorm.com™©
  170. 170. Qu’est-ce qu’une procédure stockée ? Un sous-programme Stokée dans la base de données sous format compilé Effectue un traitement Peut recevoir des arguments Le langage PL/SQL alphorm.com™©
  171. 171. Création d’une procédure stockée Syntaxe [ CREATE [ OR REPLACE ] ] PROCEDURE <nom_procedure> [ ( <nom_argument> [ { IN | OUT | IN OUT } ] TYPE [ , . . . ] ) ] { IS | AS } BEGIN Le langage PL/SQL alphorm.com™© BEGIN . . . EXCEPTION <nom_exception> THEN <instructions>; END [ <nom_procedure> ];
  172. 172. Appel d’une procédure Syntaxes <nom_procedure> [ (<argument1>, . . . ] ) ] ; CALL <nom_procedure> [ (<argument1>, . . . ] ) ] ; EXEC | EXECUTE <nom_procedure> [ (<argument1>, . . . ] ) ] ; Le langage PL/SQL alphorm.com™©
  173. 173. Suppression d’une procédure Syntaxe DROP PROCEDURE <nom_procedure>; Le langage PL/SQL alphorm.com™©
  174. 174. Les fonctions Le langage PL/SQL alphorm.com™©
  175. 175. Les fonctions Les programmes stockés Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Les fonctions Noureddine DRISSI Expert consultant bases de données
  176. 176. Objectifs Connaître les caractéristiques d’une fonction Créer et utiliser des fonctions Le langage PL/SQL alphorm.com™©
  177. 177. Qu’est-ce qu’une fonction ? Identique à une procédure à la différence qu'elle retourne une valeur Stokée dans la base de données sous format compilé Peut recevoir des arguments (paramètres) Le langage PL/SQL alphorm.com™©
  178. 178. Création d’une fonction Syntaxe [ CREATE [ OR REPLACE ] ] FONCTION <nom_fonction> [ ( <nom_argument> [ { IN | OUT | IN OUT } ] TYPE [ , . . . ] ) ] RETURN <type_valeur> { IS | AS } BEGIN Le langage PL/SQL alphorm.com™© BEGIN . . . RETURN EXPRESSION; EXCEPTION <nom_exception> THEN <instructions>; END [ <nom_fonction> ];
  179. 179. Appel d’une fonction Syntaxes En PL/SQL BEGIN <nom_variable> := <nom_fonction>[ (<argument1>, . . . ] ) ] ; END; Le langage PL/SQL alphorm.com™© END; En SQL SELECT <nom_fonction>[ (<argument1>, . . . ] ) ] ;
  180. 180. Suppression d’une fonction Syntaxe DROP FONCTION <nom_fonction> ; Le langage PL/SQL alphorm.com™©
  181. 181. Les arguments Le langage PL/SQL alphorm.com™©
  182. 182. Les arguments Les programmes stockés Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Les arguments Noureddine DRISSI Expert consultant bases de données
  183. 183. Objectif Savoir déclarer et utiliser des arguments dans une procédure ou une fonction Le langage PL/SQL alphorm.com™©
  184. 184. Déclaration des arguments Syntaxe <nom_argument> [ { IN | OUT | IN OUT } ] [ NOCOPY ] TYPE [ , . . . ] IN indique que le paramètre transmis par le programme appelant n'est pas modifiable par la fonction OUT indique que le paramètre est modifiable par la procédure IN OUT indique que le paramètre est transmis par le programme appelant et renseigné par la Le langage PL/SQL alphorm.com™© IN OUT indique que le paramètre est transmis par le programme appelant et renseigné par la fonction NOCOPY indique que le paramètre est transmis par référence (pointeur) et non par copie de la valeur TYPE représente le type SQL ou PL/SQL du paramètre := représente le symbole d'assignation d'une valeur par défaut DEFAULT identique à :=
  185. 185. Maintenance des programmes stockés Le langage PL/SQL alphorm.com™© stockés
  186. 186. Maintenance des Les programmes stockés Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Maintenance des programmes stockés Noureddine DRISSI Expert consultant bases de données
  187. 187. Objectif Savoir maintenir les programmes stockés Le langage PL/SQL alphorm.com™©
  188. 188. La compilation Syntaxe ALTER PROCEDURE <nom_procédure> COMPILE; ALTER FUNCTION <nom_fonction> COMPILE; Le langage PL/SQL alphorm.com™©
  189. 189. Les meta-données Les vues USER_SOURCE pour les objets appartenant au schéma ALL_SOURCE pour les objets appartenant aux schémas accessibles DBA_SOURCE pour les objets appartenant à tous les schémas Le langage PL/SQL alphorm.com™©
  190. 190. Récapitulatif sur les programmes stockés et exercices Le langage PL/SQL alphorm.com™© stockés et exercices
  191. 191. Récapitulatif sur les Les programmes stockés Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Récapitulatif sur les programmes stockés et exercices Noureddine DRISSI Expert consultant bases de données
  192. 192. Objectifs Rappel sur les programmes stockés Exercices Le langage PL/SQL alphorm.com™©
  193. 193. Ce que nous avons étudiés Les procédures stockés avec et sans argument Les fonctions avec et sans arguments Les fonctions renvoyant une valeur scalaire Les fonctions renvoyant une table Les arguments avec le mode d’affection (IN, OUT, IN OUT, NOCOPY) Le langage PL/SQL alphorm.com™© Les arguments avec le mode d’affection (IN, OUT, IN OUT, NOCOPY)
  194. 194. Les programmes stockés: exercice 8 (sol_exercice8.txt) Créez une procédure stockée nommée « updatequantite » qui met à jour la quantité en stock d’un article. La référence de l’article et la quantité seront passés en paramètres (arguments) à la procédure stockée. Créez une fonction nommée « valeurstock » qui retourne la valeur des articles en stock. Le langage PL/SQL alphorm.com™© articles en stock. Créez une fonction nommée « articleparcategorie » non stockée en base qui retourne le nombre d’article par catégorie pour toutes les catégories et qui les affichent.
  195. 195. Les packages Le langage PL/SQL alphorm.com™©
  196. 196. Introduction aux packages Les packages Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Introduction aux packages Noureddine DRISSI Expert consultant bases de données
  197. 197. Objectifs Décrire la structure d’un package Comprendre le fonctionnement des packages Le langage PL/SQL alphorm.com™©
  198. 198. Qu’est-ce qu’un package ? Un regroupement de procédures ou de fonctions Contient deux sections Une section de déclaration Une section de traitement Le langage PL/SQL alphorm.com™©
  199. 199. Les avantages de l’utilisation d’un package Protection des données Amélioration des performances Persistance des objets Le langage PL/SQL alphorm.com™©
  200. 200. PACKAGE Structure d’un package Déclaration: PROCEDURES / FONCTIONS VARIABLES / TYPE VARIABLE CURSEURS Spécification de package Eléments publics Le langage PL/SQL alphorm.com™© Corps de package PROCEDURE BEGIN . . . END; FONCTION BEGIN . . . END; VARIABLES CURSEURS Eléments privés
  201. 201. Syntaxe de création d’un package CREATE [ OR REPLACE ] PACKAGE <nom_package> { IS | AS } [ Déclaration des variables et des types ] [ Déclaration des curseurs ] Le langage PL/SQL alphorm.com™© [ Déclaration des procédures et des fonctions ] END <nom_package>;
  202. 202. Syntaxe de création d’un corps de package CREATE [ OR REPLACE ] PACKAGE BODY <nom_package> { IS | AS } [ Déclaration des variables et des types ] [ Déclaration des curseurs ] [ Déclaration des procédures et des fonctions ] Le langage PL/SQL alphorm.com™© [ Déclaration des procédures et des fonctions ] [ BEGIN <instructions_plsql>; [ EXCEPTIONS <gestion_exception> END <nom_package>;
  203. 203. Utilisation des curseurs dans les packages Le langage PL/SQL alphorm.com™© packages
  204. 204. Utilisation des curseurs Les packages Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Utilisation des curseurs dans les packages Noureddine DRISSI Expert consultant bases de données
  205. 205. Objectif Utiliser des curseurs dans les packages Le langage PL/SQL alphorm.com™©
  206. 206. Spécification du curseur Obligation d’utiliser la clause RETURN avec le curseur associé Un enregistrement %ROWTYPE Un enregistrement défini par l’utilisateur Le langage PL/SQL alphorm.com™©
  207. 207. Maintenance des packages Le langage PL/SQL alphorm.com™©
  208. 208. Maintenance des Les packages Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Maintenance des packages Noureddine DRISSI Expert consultant bases de données
  209. 209. Objectif Modifier et supprimer un package Le langage PL/SQL alphorm.com™©
  210. 210. Syntaxe de modification d’un package ALTER PACKAGE <nom_package> COMPILE [ PACKAGE | BODY ] ; Le langage PL/SQL alphorm.com™©
  211. 211. Syntaxe de suppression d’un package DROP [ PACKAGE | BODY ] <nom_package> ; Le langage PL/SQL alphorm.com™©
  212. 212. Récapitulatif sur les packages et exercices Le langage PL/SQL alphorm.com™© exercices
  213. 213. Récapitulatif sur les Les packages Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Récapitulatif sur les packages et exercices Noureddine DRISSI Expert consultant bases de données
  214. 214. Objectifs Rappel sur les packages Exercices Le langage PL/SQL alphorm.com™©
  215. 215. Ce que nous avons étudiés Ce qu’est un package La structure d’un package Spécification de package Corps de package Utilisation des fonctions, procédures et des curseurs dans un package Le langage PL/SQL alphorm.com™© Utilisation des fonctions, procédures et des curseurs dans un package Utiliser les objets d’un package Maintenir un package
  216. 216. Les packages: exercice 9 (sol_exercice9.txt) Créez un package nommé gestEmp avec les objets suivants: Un fonction qui contrôle l’existence d’un salarié à partir de son numéro. Une procédure qui permet de supprimer un salarié à partir de son numéro. Une procédure qui permet d’augmenter le salaire d’un salarié. La procédure doit reçevoir deux arguments: le premier est le numéro du salarié, le deuxième le pourcentage d’augmention). Le langage PL/SQL alphorm.com™© doit reçevoir deux arguments: le premier est le numéro du salarié, le deuxième le pourcentage d’augmention). Une procédure qui affiche tous les salariés dont le salaire est supérieur à la moyenne des salaires (cette procédure devra s’appuyer sur un curseur nommé « cur_sal »)
  217. 217. Les triggers (déclencheurs) Le langage PL/SQL alphorm.com™©
  218. 218. Introduction Les déclencheurs Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Introduction Noureddine DRISSI Expert consultant bases de données
  219. 219. Objectifs Décrire un déclencheur Connaître les caractéristiques d’un déclencheur Le langage PL/SQL alphorm.com™©
  220. 220. Un déclencheur c’est quoi ? Définit une action qui doit se déclencher lorsqu’un évènement survient sur la base de données Objet stocké en base Associé à une table ou à une vue Pas de COMMIT/ROLLBACK dans un déclencheur Le langage PL/SQL alphorm.com™© Pas de COMMIT/ROLLBACK dans un déclencheur
  221. 221. Avantage du déclencheur Ajouter des contraintes sur les valeurs des colonnes d’une table Réaliser un audit des changements sur les données (logs) Ajout des règles de gestion Publier des informations concernant divers évènements Le langage PL/SQL alphorm.com™©
  222. 222. Les niveaux d’exécutions De niveau table (STATEMENT) Exécuté une seule fois quelque soit le nombre de ligne modifié De niveau enregistrement (ROW) Exécuté séparément pour chaque ligne modifiée FOR EACH ROW Le langage PL/SQL alphorm.com™© FOR EACH ROW
  223. 223. Les types de déclencheurs ? Les déclencheurs LMD Avant ou après INSERT, UPDATE ou DELETE Les déclencheurs INSTEAD OF De niveau ligne seulement Le langage PL/SQL alphorm.com™© De niveau ligne seulement S’exécute à la place de l’instruction qui a déclenché le trigger Les déclencheurs SYSTEME Démarrage ou arrêt d’une base A la création, suppression ou modification d’un objet (DDL) A la connexion ou déconnexion d’un utilisateur
  224. 224. Syntaxe de création CREATE [ OR REPLACE ] TRIGGER <nom_trigger> { BEFORE | AFTER | INSTEAD OF } <nom_evenement1> [ <nomevenement2> ] [ CLAUSE_REFERENCING] [ WHEN CONDITION ] [ FOR EACH ROW ] [ DECLARE . . . ] BEGIN Le langage PL/SQL alphorm.com™© . . . [ EXCEPTION . . . ] END [ <nom_trigger> ] ;
  225. 225. Les déclencheurs LMD Le langage PL/SQL alphorm.com™©
  226. 226. Les déclencheurs LMD Les déclencheurs Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Les déclencheurs LMD Noureddine DRISSI Expert consultant bases de données
  227. 227. Objectif Créer des déclencheurs LMD Le langage PL/SQL alphorm.com™©
  228. 228. Rappel: syntaxe de création CREATE [ OR REPLACE ] TRIGGER <nom_trigger> { BEFORE | AFTER | INSTEAD OF } <nom_evenement1> [ OR <nomevenement2> ] [ CLAUSE_REFERENCING] [ WHEN CONDITION ] [ FOR EACH ROW ] [ DECLARE . . . ] Le langage PL/SQL alphorm.com™© BEGIN . . . [ EXCEPTION . . . ] END [ <nom_trigger> ] ;
  229. 229. Déclenchement Ce qui déclenche le déclencheur INSERT AVANT ou APRES insertion UPDATE Le langage PL/SQL alphorm.com™© AVANT ou APRES mise à jour Possibilité UPDATE TO <champ1> [ , <champN> ] DELETE AVANT ou APRES suppression
  230. 230. Caractéristiques Doit posséder un nom unique La définition du trigger porte sur: une est une seule table pas une vue. Le langage PL/SQL alphorm.com™©
  231. 231. Nombre de trigger par table Possibilité de créer un nombre illimité de déclencheurs Possibilité de définir plusieurs déclencheurs d’un même type Exécution séquentielle des déclencheurs s’il en existe plusieurs Le langage PL/SQL alphorm.com™©
  232. 232. Le niveau d’exécution Le langage PL/SQL alphorm.com™©
  233. 233. Le niveau d’exécution Les déclencheurs Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Le niveau d’exécution Noureddine DRISSI Expert consultant bases de données
  234. 234. Objectif Comprendre le niveau d’exécution d’un déclencheur Le langage PL/SQL alphorm.com™©
  235. 235. Rappel: syntaxe de création CREATE [ OR REPLACE ] TRIGGER <nom_trigger> { BEFORE | AFTER | INSTEAD OF } <nom_evenement1> [ <nomevenement2> ] [ CLAUSE_REFERENCING] [ WHEN CONDITION ] [ FOR EACH ROW ] [ DECLARE . . . ] BEGIN Le langage PL/SQL alphorm.com™© BEGIN . . . [ EXCEPTION . . . ] END [ <nom_trigger> ] ;
  236. 236. Niveaux d’exécution De niveau table (STATEMENT) Exécuté une seule fois quelque soit le nombre de ligne modifié De niveau enregistrement (ROW) Exécuté séparément pour chaque ligne modifiée FOR EACH ROW Le langage PL/SQL alphorm.com™© FOR EACH ROW
  237. 237. Accès aux valeurs via :OLD et :NEW Le langage PL/SQL alphorm.com™©
  238. 238. Accès aux valeurs via :OLD Les déclencheurs Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Accès aux valeurs via :OLD et :NEW Noureddine DRISSI Expert consultant bases de données
  239. 239. Objectif Créer des déclencheurs en utilisant les valeurs des attributs :OLD et :NEW Le langage PL/SQL alphorm.com™©
  240. 240. Valeur des attributs Possibilité d’accéder à la valeur des attributs avant et après modification :OLD.nom_attribut (permet d’accéder à la valeur avant modification) :NEW.nom_attribut (permet d’accéder à la valeur après modification) Le langage PL/SQL alphorm.com™©
  241. 241. Précisions INSERT Pas d’accès à l’élément OLD (n’existe pas) UPDATE Accès possible à l’élément OLD et NEW Le langage PL/SQL alphorm.com™© DELETE Pas d’accès à l’élément NEW (n’existe plus) Utilisable uniquement avec un déclencheur de niveau enregistrement
  242. 242. La clause REFERENCING Fonction Permet de créer un alias pour « :OLD » et « :NEW » SYNTAXE REFERENCING [ OLD AS <nom_ancien> ] [ NEW AS <nom_nouveau> ] Le langage PL/SQL alphorm.com™©
  243. 243. Déclenchement conditionnel et les prédicats Le langage PL/SQL alphorm.com™© prédicats
  244. 244. Déclenchement Les déclencheurs Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Déclenchement conditionnel et les prédicats Noureddine DRISSI Expert consultant bases de données
  245. 245. Objectifs Créer un déclencheur avec un déclenchement conditionnel (WHEN) Créer un déclencheur avec les prédicats Le langage PL/SQL alphorm.com™©
  246. 246. Clause WHEN Ne s’applique qu’aux déclencheurs de niveau enregistrement Syntaxe WHEN <condition> Le langage PL/SQL alphorm.com™©
  247. 247. Les fonctions prédicats INSERTING Retourne TRUE si l’instruction LMD est un INSERT UPDATING Retourne TRUE si l’instruction LMD est un UPDATE Le langage PL/SQL alphorm.com™© DELETING Retourne TRUE si l’instruction LMD est un DELETE
  248. 248. Complément sur les déclencheurs Le langage PL/SQL alphorm.com™©
  249. 249. Complément sur les Les déclencheurs Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Complément sur les déclencheurs Noureddine DRISSI Expert consultant bases de données
  250. 250. Objectifs Connaître l’utilisation des déclencheurs INSTEAD OF Utilisation de l’ordre PRAGMA AUTONOMOUS_TRANSACTION Réaliser les tâches d’exploitation des déclencheurs Le langage PL/SQL alphorm.com™©
  251. 251. Les déclencheurs INSTEAD OF Définis uniquement sur des objets vues S’exécute à la place de l’ordre LMD qui a déclenché le déclencheur Le langage PL/SQL alphorm.com™©
  252. 252. Transaction autonome Les déclencheurs de niveau ligne, ne peuvent pas lire ou modifier la table (table en mutation) sur laquelle porte le déclencheur Les déclencheurs de niveau table peuvent lire et modifier la table sur laquelle porte le déclencheur Possibilité d’utiliser la directive PRAGMA AUTONOMOUS_TRANSACTION Le langage PL/SQL alphorm.com™© AUTONOMOUS_TRANSACTION Possibilité d’utiliser les commandes « COMMIT » et « ROLLBACK »
  253. 253. Autres caractéristiques Triggers en cascade Un trigger peut provoquer le déclenchement d'un autre trigger. ORACLE autorise jusqu'à 32 triggers en cascade à un moment donné. Limite Un trigger ligne ne peut pas lire et/ou modifier la table concernée (appelée Le langage PL/SQL alphorm.com™© Un trigger ligne ne peut pas lire et/ou modifier la table concernée (appelée table mutante) par l'instruction (INSERT, UPDATE ou DELETE) qui a déclenché le trigger.
  254. 254. Création de déclencheurs Conditions nécessaires pour créer un trigger Privilège CREATE TRIGGER Posséder (ou privilege ALTER, ALTER ANY) la table sur laquelle on veut définir le déclencheur Modification de triggers Le langage PL/SQL alphorm.com™© Modification de triggers CREATE TRIGGER suivie de OR REPLACE ou bien on supprime le trigger (DROP TRIGGER nomtrigger) et on le crée à nouveau.
  255. 255. Activation et désactivation Un trigger peut être activé ou désactivé. Si désactivé, ORACLE le stocke mais l’ignore. Possibilité de désactiver un trigger si : il référence un objet non disponible on veut charger rapidement un volume de données important ou recharger Le langage PL/SQL alphorm.com™© on veut charger rapidement un volume de données important ou recharger des données déjà contrôlées. Par défaut, un trigger est activé dès sa création.
  256. 256. Activation et désactivation Pour désactiver ou activer un trigger , on utilise l’instruction ALTER ALTER TRIGGER <nomtrigger> DISABLE; ALTER TABLE <nomtable> DISABLE ALL TRIGGERS; ALTER TRIGGER <nomtrigger> ENABLE; ALTER TABLE <nomtable> ENABLE ALL TRIGGERS; Le langage PL/SQL alphorm.com™© ALTER TABLE <nomtable> ENABLE ALL TRIGGERS;
  257. 257. Gestion des exceptions La procédure RAISE_APPLICATION_ERROR (error_number,error_message) error_number doit être un entier compris entre -20000 et -20999 error_message doit être une chaîne de 500 caractères maximum. Quand cette procédure est appelée, elle termine le trigger, défait la transaction (ROLLBACK), renvoie un numéro d'erreur défini par l'utilisateur et Le langage PL/SQL alphorm.com™© Quand cette procédure est appelée, elle termine le trigger, défait la transaction (ROLLBACK), renvoie un numéro d'erreur défini par l'utilisateur et un message à l'application.
  258. 258. Récapitulatif sur les déclencheurs et exercices Le langage PL/SQL alphorm.com™© exercices
  259. 259. Récapitulatif sur les Les déclencheurs Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Récapitulatif sur les déclencheurs et exercices Noureddine DRISSI Expert consultant bases de données
  260. 260. Objectifs Rappel sur les déclencheurs Exercices Le langage PL/SQL alphorm.com™©
  261. 261. Ce que nous avons étudiés Les déclencheurs LMD Le niveau d’exécution des déclencheurs (INSTRUCTION ou LIGNE) Comment accéder aux valeurs via OLD et NEW Déclenchement conditionnel (WHEN) Le langage PL/SQL alphorm.com™© Les prédicats (INSERTING, UPDATING et DELETING) Les déclencheurs INSTEAD OF La directive PRAGMA AUTONOMOUS_TRANSACTION Les tâches d’exploitation des déclencheurs
  262. 262. Les déclencheurs: exercice 10 (sol_exercice10.txt) Créez un déclencheur LMD nommé trigLogClients qui se déclenche après toute instruction INSERT, UPDATE ou DELETE sur la table « clients ». Le trigger doit tracer les informartions ci-dessous dans une table que vous aurez crée au préalable: La date d’exécution et le user ayant effectué l’instruction La valeur AVANT et APRES pour les colonnes NUMERO_CLI, NOM, ADRESSE, Le langage PL/SQL alphorm.com™© La valeur AVANT et APRES pour les colonnes NUMERO_CLI, NOM, ADRESSE, CODE_POSTAL, VILLE et TELEPHONE L’instruction qui à déclenchée le déclencheur (INSERT, UPDATE ou DELETE)
  263. 263. Conclusion Le langage PL/SQL alphorm.com™©
  264. 264. Le mot de la fin Conclusion Le langage PL/SQL alphorm.com™© Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Le mot de la fin Noureddine DRISSI Expert consultant bases de données
  265. 265. Objectifs Maîtriser le langage PL/SQL Utiliser des traitements stockés et des triggers dans les applications Le langage PL/SQL alphorm.com™©
  266. 266. Plan de cours Module 1: Présentation du PL/SQL Module 2: Les variables Module 3: Accès à la base de données et ordres SQL Module 4: Les structures de contrôle Module 5: Les curseurs Le langage PL/SQL alphorm.com™© Module 5: Les curseurs Module 6: Gestion des erreurs Module 7: Les programmes stockés Module 8: Les triggers Module 9: Les packages Module 10: Les déclencheurs
  267. 267. Conclusion A venir: Le transact SQL La modélisation au sens MERISE Le langage PL/SQL alphorm.com™©
  268. 268. FIN Merci pour votre attention Conclusion Le langage PL/SQL alphorm.com™© Merci pour votre attention

×