Your SlideShare is downloading. ×
0
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Introduction à pl/sql
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Introduction à pl/sql

6,580

Published on

PL/SQL (Procedural Language / SQL), l’extension procédurale proposée par Oracle pour SQL (L4G), …

PL/SQL (Procedural Language / SQL), l’extension procédurale proposée par Oracle pour SQL (L4G),
Il permet de combiner des requêtes SQL (SELECT, INSERT, UPDATE et DELETE) et des instructions procédurales (boucles, conditions...),
Créer des traitements complexes destinés à être stockés sur le serveur de base de données (objets serveur),
Comme on le sait, les structures de contrôle habituelles d’un langage (IF, WHILE…) ne font pas partie intégrante de la norme SQL. Oracle les prend en compte dans PL/SQL.

Published in: Education
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,580
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
247
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. INTRODUCTION À LA PROGRAMMATION PL/SQL Abdelouahed Sabri abdelouahed.sabri@gmail.com 1
  • 2. PLAN Introduction,  Avantages de PL/SQL,  Les principales caractéristiques du PL / SQL,  Les variables et constantes,  Les structures de contrôle  Interaction avec la base de données à partir de PL/SQL  Les sous programmes PL/SQL   Déclencheurs (Triggers) 2
  • 3. BIBLIOGRAPHIE Christian Soutou « SQL pour Oracle »  Gilles Briard « Oracle10g sous Windows »  John Russell « PL_SQL Reference User guide 10g Release »  Denis Roegel « Le langage procédural PL/SQL »  SheikYerbouti « Oracle PL/SQL »  3
  • 4. PRÉ-REQUIS POUR CE COURS Des connaissances dans le Structured Query Language SQL,  des connaissances de base dans la programmation (IF-THEN comparaisons, boucles, …)  Des connaissances dans le SGBD Oracle,  4
  • 5. INTRODUCTION PL/SQL (Procedural Language / SQL), l’extension procédurale proposée par Oracle pour SQL (L4G),  Il permet de combiner des requêtes SQL (SELECT, INSERT, UPDATE et DELETE) et des instructions procédurales (boucles, conditions...),   Créer des traitements complexes destinés à être stockés sur le serveur de base de données (objets serveur),  Comme on le sait, les structures de contrôle habituelles d’un langage (IF, WHILE…) ne font pas partie intégrante de la norme SQL. Oracle les prend en compte dans PL/SQL. 5
  • 6. AVANTAGES DE PL/SQL 1/2  Ce langage propose des-performances pour le traitement des transactions et offre les avantages suivants:    Intégration complète du SQL, Prise en charge de la programmation orientée objet (surcharge), Parfaite Intégration avec Oracle et Java, en fait PL/SQL est un langage propriétaire de Oracle,  On peut lancer des sous-programme Pl/SQL à partir de Java et de même, on peut appeler des procédures Java à partir d’un block Pl/SQL  6
  • 7. AVANTAGES DE PL/SQL 2/2  Portabilité totale : Toutes les bases de données Oracle comportent un moteur d’exécution PL/SQL. les programmes PL/SQL sont indépendants du système d’exploitation qui héberge le serveur Oracle. En changeant de système, les applicatifs n’ont pas à être modifiés.  Facilité de programmation : PL/SQL est un langage simple d’apprentissage et de mise en œuvre. Sa syntaxe claire offre une grande lisibilité en phase de maintenance de vos applications. De nombreux outils de développement, autres que ceux d’Oracle 10g, autorisent la programmation en PL/SQL dans la base de données. 7
  • 8. AVANTAGES DE PL/SQL EXEMPLE D’INTÉGRATION ENTRE PL/SQL ET SQL  Vous n'avez pas à traduire les types de données entre SQL et PL/SQL:  On retrouvera avec PL/SQL tous les types de données et instructions disponibles sous SQL, et des mécanismes pour parcourir des résultats de requêtes (curseurs), pour traiter des erreurs (exceptions), pour manipuler des données complexes (paquetages DBMS_xxx) et pour programmer des transactions « COMMIT, ROLLBACK, SAVEPOINT »  Cette intégration nous permet d'économiser à la fois le temps d'apprentissage et le temps d’exécution. Les fonctionnalités du langage PL/SQL nous permettent de travailler avec des colonnes et des lignes des tables sans préciser les types de données, ce qui nous permet d’économiser du temps d'entretien lorsque la définition des tables change. 8
  • 9. AVANTAGES DE PL/SQL PL/SQL PROPOSE UNE BONNE PERFORMANCE  Dans PL/SQL, ce ne sont plus des requêtes SQL qui sont transmis un à un au moteur de base de données, mais des blocs et des sous-programmes, Alors: Le traitement des données est donc interne à la base, ce qui réduit considérablement le trafic entre celle-ci et l’application,  Il est préférable de travailler avec un bloc PL/SQL plutôt qu’avec une suite d’instructions SQL susceptibles d’encombrer le trafic réseau  9
  • 10. AVANTAGES DE PL/SQL PL/SQL PROPOSE UNE BONNE PERFORMANCE  Dans un environnement clientserveur, chaque instruction SQL donne lieu à l’envoi d’un message du client vers le serveur suivi de la réponse du serveur vers le client.  Un bloc PL/SQL donne lieu à un seul échange sur le réseau entre le client et le serveur. Les résultats intermédiaires sont traités côté serveur et seul le résultat final est retourné au client 10
  • 11. LES PRINCIPALES CARACTÉRISTIQUES DU PL/SQL  PL/SQL combine la puissance de manipulation de données d’SQL avec la puissance de traitement des langages procédurales:    Vous pouvez contrôler le déroulement du programme avec des déclarations comme IF et LOOP Vous pouvez déclarer des variables, définir des procédures et fonctions et faire la gestion des différentes exceptions, PL/SQL vous permet de décomposer des problèmes complexes en compréhensible code (ou procédures), et permet l’utilisation de ce code dans plusieurs applications. 11
  • 12. LES PRINCIPALES CARACTÉRISTIQUES DU PL/SQL  La figure suivante présente la façon avec laquelle le moteur PL/QL traite un bloc PL/SQL anonyme.  Le moteur PL/SQL exécute des instructions procédurales, mais envoi des instructions au moteur SQL dans la base de données Oracle. 12
  • 13. STRUCTURE D’UN PROGRAMME PL/SQL PL/SQL est un langage structuré en blocs, constitués d'un ensemble d'instructions,  Un bloc PL/SQL peut être "externe", on dit alors qu'il est anonyme, ou alors stocké dans la base de données sous forme de procédure, fonction ou trigger (on lui affecte un nom),  Un bloc PL / SQL contient trois parties :  une partie déclarative, 2. une partie exécutable, 3. une partie pour la gestion des exceptions. NB: Seule la partie exécutable est nécessaire. 1. 13
  • 14. STRUCTURE D’UN PROGRAMME PL/SQL  La première partie d’un code est la partie déclarative: Définition des types, variables curseurs, exceptions, etc.  Ces éléments sont manipulés dans la partie exécutable.  Le nom réservé est DECLARE. NB: Cette section est optionnelle.   La deuxième partie est la partie exécutable: Contient le code PL/SQL incluant ou non des directives SQL.  Cette partie de code débute par le mot réservé BEGIN et se termine par le mot réservé END; (ne pas oublier le pointvirgule). NB: Cette section est obligatoire.   La troisième section est la partie de gestion des exceptions. Cette partie débute par le mot réservé EXCEPTION.  Elle permet de traiter les erreurs retournées par le SGBD à la suite d’exécutions d’instructions SQL. NB: Cette partie est optionnelle.  14
  • 15. STRUCTURE D’UN PROGRAMME PL/SQL  Un bloc peut être imbriqué dans le code d’un autre bloc (on parle de sous-bloc).   NB: Un sous-bloc commence par BEGIN et se termine par END; La portée d’un objet (variable, type, curseur, exception, etc.) est la zone du programme qui peut y accéder 15 NB: Un sous-bloc peut aussi se trouver dans la partie des exceptions
  • 16. LE JEU DE CARACTÈRES EN PL/SQL  Les caractères qui sont interprétés par PL/SQL, comme SQL, sont :    Les alphanumérique : lettres A à Z et a à z ; chiffres de 0 à 9 Les symboles ( ) + - * / < > = ! ~ ^ ; : . ' @ % , " # $ & _ | { } ? [ ] Les caractères spéciaux comme : tabulations, espaces et retours-chariot NB: PL/SQL n’est pas sensible à la casse Tva=TVA 16
  • 17. LE JEU DE CARACTÈRES EN PL/SQL  Pour une meilleure lisibilité, on peut séparer les unités lexicales par des espaces, des tabulations et des retours à la ligne. Code lisible Code (correct) peu lisible … IF x>y THEN max:=x;ELSE max:=y;END IF; … IF x > y THEN max := x; ELSE max := y; END IF; … 17
  • 18. LES IDENTIFIANTS  Avant de parler des différents types de variables PL/SQL, décrivons comment il est possible de nommer des objets PL/SQL (variables, curseurs, exceptions, etc.).  Un identificateur commence par une lettre suivie (optionnel) de symboles (lettres, chiffres, $, _, #).   Certains symboles sont interdits: &, -, /, +, : Un identificateur peut contenir jusqu’à trente caractères. Identifiants autorisés A AA2 TVA# Hors_Taxe Requéte$Sql Identifiants non autorisés A&A (symbole &) 2A (debut chiffre) Hors-Taxe (symbole -) Vrai/Faux (symbole /) Requéte Sql (symbole espace) 18
  • 19. LES COMMENTAIRES  PL/SQL supporte deux types de commentaires : 1. 2. Mono-lignes; commençant au symbole -- et finissant à la fin de la ligne, Multi-lignes; commençant par /* et finissant par */ BEGIN … -- Lecture du nom d’un utilisateur utilisant son ID SELECT nom INTO v_nom FROM T_USER WHERE id=5; /* Ecriture dans la table Log pour spécifier quel utilisateur est connecté à l’application en spécifiant: 1- le nom 2-l’heure et la date */ 19 INSERT INTO log VALUES (v_nom, v_heure, v_date); … END;
  • 20. LES MOTS RÉSERVÉS  Certains identifiants, appelés mots réservés, ont une signification syntaxiques particulière dans PL/SQL.  Par exemple, les mots BEGIN et END sont réservés. Une redéfinition d’un mot réservé provoque une erreur de compilation  Souvent, les mots réservés sont écrits en majuscules pour une meilleure lisibilité  20
  • 21. EXÉCUTION D’UN PROGRAMME PL/SQL  Pour exécuter un programme PL/SQL, l’outil le plus simple livré par Oracle est SQL*Plus:  Cet outil permet: D’accéder à l’ensemble des fonctionnalités d’Oracle (10g) à partir d’une interface textuelle identique (Console), quel que soit le système d’exploitation utilisé  D’exécuter de façon interactive des ordres SQL unitaires,  De lancer des fichiers contenant un ensemble d’ordres SQL.  21
  • 22. EXÉCUTION D’UN PROGRAMME PL/SQL INTERFACES SQL*PLUS  Il existe plusieurs interfaces SQL*Plus Sous Windows :    En mode ligne de commande (qui ressemble à une fenêtre DOS ou telnet) Avec une interface graphique SQL*Plus Worksheet de l’outil Enterprise Manager Avec le navigateur via l’interface Web iSQL*Plus (i comme « Internet »:   Cette interface s’apparente assez à celle de EasyPHP en étant très intuitive). NB : Les interfaces graphiques SQL*Plus et iSQL*Plus ne sont plus offertes depuis la version 11g. L’interface en mode ligne de commande reste toutefois disponible pour toutes les versions.  Pour cela on va s’intéresser à SQL*Plus en mode ligne de commande. 22 
  • 23. EXÉCUTION D’UN PROGRAMME PL/SQL INTERFACES SQL*PLUS  Pour lancer SQL*Plus, tapez dans une fenêtre Console DOS (bien sur on suppose que Oracle (10g) est installé): C:> sqlplus  Il y’a deux modes de connexions:   Mode utilisation simple de la base de données, Mode avec privilèges pour administration.  Le privilège SYSOPER: permet à un administrateur de la base de données d’exécuter: STARTUP, SHUTDOWN, ALTER DATABASE OPEN/MOUNT, ALTER DATABASE BACKUP, ARCHIVE LOG, and RECOVER  Le privilège SYSDBA: contient tout les privilèges y compris ADMIN OTPION et SYSOPER 23
  • 24. EXÉCUTION D’UN PROGRAMME PL/SQL INTERFACES SQL*PLUS  Pour se connecter en mode administration, dans la fenêtre Console DOS on tape : # Connexion avec un utilisateur ayant reçu le privilège SYSDBA connect utilisateur/passwd as SYSDBA. # connexion avec un utilisateur ayant reçu le privilège SYSOPER connect utilisateur/passwd as SYSOPER 24
  • 25. EXÉCUTION D’UN PROGRAMME PL/SQL INTERFACES SQL*PLUS  On peut aussi saisir des options lors du lancement de SQL*Plus : C:> sqlplus -S utilisateur/mot_de_passe@base_cible @fichier_sql    -S pour spécifier que c’est un mode « silencieux » l’utilisateur et le mot de passe peuvent être suivis de l’alias Oracle Net de la base cible à laquelle vous souhaitez vous connecter. Dans ce cas, le signe @ est accolé au mot de passe un fichier de commande contenant des ordres SQL, des commandes SQL*Plus et PL/ SQL peut être automatiquement lancé, un espace doit alors précéder le signe @ 25
  • 26. EXÉCUTION D’UN PROGRAMME PL/SQL INTERFACES SQL*PLUS  Quelques commandes utiles:  HOST pour lancer des commandes OS à partir de la session SQL*Plus,:   Pour lister le contenu d’un répertoire : HOST DIR NB: Celle-ci ne termine pas votre session SQL*Plus  DISC (DISCONNECT) pour se déconnecter de la base Oracle cible  EXIT ou QUIT pour se déconnecter et terminer une session SQL*Plus LIST ou L permet de visualiser la dernière commande SQL saisie RUN ou R exécute l’ordre SQL présent dans le buffer   NB: Un bloc d’instructions PL/SQL doit se terminer par une 26 « / ».
  • 27. EXÉCUTION D’UN PROGRAMME PL/SQL INTERFACES SQL*PLUS  Quelques commandes utiles:  ED (EDIT) permet d’appeler l’éditeur de texte et y place l’ordre SQL présent dans le buffer courant.  Pour préciser l’éditeur de texte de votre choix (ici notepad), utilisez la commande SQL*Plus ; SQL> def _editor = notepad ed mon_fichier.sql # si le fichier n’existe pas, il sera crée  Pour exécuter un fichier de commande à partir de SQL*Plus start mon_fichier.sql -- ou bien @mon_fichier.sql 27
  • 28. EXÉCUTION D’UN PROGRAMME PL/SQL INTERFACES SQL*PLUS  Quelques commandes utiles:  SET TIMING ON|OFF permet de mesurer la durée d’exécution de vos ordres SQL (en millisecondes).  SET SERVEROUTPUT ON|OFF Permet d’activer ou de désactiver l’affichage à la console  PROMPT ‘Texte à afficher à la console’   ACCEPT nom_var   Permet de récupérer une valeur saisie par l’utilisateur et de la stocker dans nom_var. pour l’utiliser dans un bloc Pl/SQL on utilise ‘&nom_var’ VARIABLE nom_var TYPE    Permet d’afficher un texte à la console Déclarer une variable globale on précisant son type Pour l’utiliser en PL/SQL on utilise :nom_var PRINT var  Afficher le contenu de var 28
  • 29. EXÉCUTION D’UN PROGRAMME PL/SQL EXEMPLE  Exemple: Créer un nouvel utilisateur.  Nb: On se connecte sous le compte SYSTEM (le mot de passe SYSTEM est saisi lors de l’installation d’oracle). connect SYSTEM/pass as SYSDBA -- sous l’utilisateur SYSTEM create user SIRM identified by SIRMpass; -- Se connecter sous SIRM Connect SIRM/SIRMpass as sysdba -- executer un script start ORACLE_HOMERDBMSADMINSCRIPT.SQL -- Afficher le nom de l’utilisateur courant show user 29
  • 30. LES VARIABLES ET CONSTANTES  PL / SQL permet de déclarer des constantes (valeur invariable) et des variables pour les utiliser dans des programme SQL.  Il faut déclarer une constante ou variable avant de la référencer.  Déclaration:   Les variables et les constantes sont déclarées éventuellement initialisées) dans la section DECLARE. (et La syntaxe: nom_de_la_variable [CONSTANT] TYPE_DE_DONNEE [NOT NULL] [:= | DEFAULT expression]; En plus des types de données propre à PL/SQL comme BOOLEAN30 ou PLS_INTEGER, Les variables peuvent avoir n'importe quel type SQL comme CHAR, DATE, ou NUMBER.
  • 31. LES VARIABLES ET CONSTANTES DÉCLARATION:  Exemple:     Déclarer une variable nommée v_telephone qui va contenir 10 chiffres (Type NUMBER (10)) Déclarer une variable nommée v_disponible pour contenir une valeur booléenne (BOOLEAN) TRUE ou FALSE. Déclarer une variable v_TVA de type NUMBER et l’initialiser par 0.02 La syntaxe pour déclarer une variable est la suivante: nom_de_la_variable [CONSTANT] TYPE_DE_DONNEE [NOT NULL] [:= | DEFAULT expression]; DECLARE v_telephone NUMBER(10); v_disponible BOOLEAN; v_TVA NUMBER :=0.02; 31
  • 32. LES VARIABLES ET CONSTANTES DÉCLARATION:  Les constantes: Pour la déclaration des constantes on utilise le mot réservé CONSTANT nom_de_la_variable [CONSTANT] TYPE_DE_DONNEE [NOT NULL] [:= | DEFAULT expression]; NB: Il faut initialiser les constantes lors de leur déclaration.  Exemple: DECLARE c_TVA CONSTANT NUMBER :=0.02; … BEGIN … END 32
  • 33. LES VARIABLES ET CONSTANTES DÉCLARATION:  La portée d'une variable: Est la région d'une unité de programme (bloc ou sousprogramme) à partir duquel on peut faire référence à cet identifiant.   Les identifiants (variables) qui sont déclarés dans un bloc PL/SQL sont considérés comme locaux à ce bloc et globaux à ces sous-blocs. Bien qu’on ne puisse pas déclarer un identifiant deux fois dans le même bloc, on peut déclarer le même identifiant dans deux blocs différents.   Les deux éléments (variables) représentés par l'identifiant sont distincts, et tout changement dans l'un n'affecte pas l'autre. Un bloc ne peut pas faire référence à identifiants qui est déclaré dans l’autre bloc parce que ces identifiants ne sont33 ni locaux ni globaux au bloc.
  • 34. LES VARIABLES ET CONSTANTES AFFECTATION: L’affectation d’une valeur à une variable est effectuée en PL/SQL en utilisant l’operateur « := »  L’affectation peut être effectuée dans la partie déclaration comme dans la partie exécutable;  DECLARE nom_de_la_variable TYPE_DE_DONNEE [NOT NULL] [:= | DEFAULT expression]; -- ou bien BEGIN nom_de_la_variable := valeur; … END ; 34
  • 35. LES VARIABLES ET CONSTANTES AFFECTATION:  Exemple: DECLARE v_telephone NUMBER(10); v_disponible BOOLEAN; v_DateDeNaissance Date; c_TVA CONSTANT NUMBER :=0.02; v_TTC NUMBER ; v_HT NUMBER ; BEGIN v_disponible :=TRUE ; v_telephone :=0666666666; v_TTC := v_HT + c_TVA ; END; / 35
  • 36. LES VARIABLES ET CONSTANTES AFFECTATION:  Une autre façon pour affecter à une variable une valeur est d’utiliser la directive DEFAULT. v_pays CHAR(5) := ’MAROC’ ; /* Équivaut à v_pays CHAR(5) DEFAULT 'MAROC'; */  La troisième façon pour attribuer des valeurs à une variable consiste à sélectionner (ou récupérer) des valeurs de la base de données:  Dans l'exemple ci-dessous, nous allons récupérer le nom d’un employé dont ID=10 et l’enregistrer dans la variable v_nom. BEGIN SELECT nom INTO v_nom FROM T_EMPLOYE WHERE ID=10;  Il existe d’autres façons pour affecter à une variable une valeur 36
  • 37. LES VARIABLES ET CONSTANTES AFFECTATION:     NB1 : La contrainte NOT NULL doit être suivie d’une clause d’initialisation. NB2 : À l’inverse de la plupart des langages de programmation, les déclarations multiples ne sont pas permises. NB3 : Par défaut, les variables sont initialisées à la valeur NULL NB4: Seules les valeurs TRUE, FALSE et NULL peuvent être affectée à une variable booléenne.. 37
  • 38. LES VARIABLES ET CONSTANTES  EXEMPE: DECLARE -- Déclarations de variables. v_nom VARCHAR2(7); v_alias VARCHAR2(7); v_age NUMBER(2); v_naissance DATE; v_existant BOOLEAN NOT NULL DEFAULT FALSE; BEGIN v_nom := 'Mohamed'; -- Affectation d’une chaîne de caractères. v_alias:= v_nom; -- Affectation d’une variable. v_age:= 23; --Affectation d’un nombre. v_naissance := '01-01-2000'; -- Affectation de dates. v_existant := TRUE; -- Affectation d’un booléen. /*Affectation d’une chaîne de caractères par une requête.*/ SELECT nom INTO v_nom FROM T_User WHERE age= 21; END; 38
  • 39. LES TYPES DE DONNÉES   En plus des types de données propre à PL/SQL, on peut utiliser tous les types de données SQL (NUMBER, CHAR, BOOLEAN, VARCHAR2, DATE, TIMESTAMP, INTERVAL, BLOB, ROWID…) On peut distinguer:     Type scalaire: n'a pas de composants internes. Il contient une valeur singulière, comme un nombre ou une chaîne de caractères. Type composé: a des composants internes qui peuvent être manipulés individuellement, telles que les éléments d'un tableau. Type référence: contient les valeurs, appelées pointeurs, qui désignent d’autres éléments du programme. Type LOB (Large Object Binary): est un type de données ORACLE permettant de stocker des données de grande taille allant jusqu’à 39 4 Go, tels que des blocs de texte ou des images graphiques.
  • 40. LES TYPES DE DONNÉES  Les types scalaires sont répartis en quatre familles, ou on trouve les numéros, caractères, booléens, et les données date/heure. 40
  • 41. LES TYPES DE DONNÉES TYPES SCALAIRES  Le type scalaire permet de stocker des données numériques (entiers, nombres réels, et nombres à virgule flottante), représenter des quantités et de faire des calculs.      BINARY_INTEGER, PLS_INTEGER, BINARY_FLOAT, BINARY_DOUBLE, NUMBER. 41
  • 42. LES TYPES DE DONNÉES TYPES SCALAIRES  NUMBER On utilise le type de données NUMBER pour stocker des numéros à virgule fixe ou à virgule flottante. Le domaine des valeurs sont de1E-130 à 10E125.  La précision est le nombre de chiffres à droite de la virgule. La syntaxe est la suivante :  NUMBER[(precision[,scale])] -- scale max = 38, la valeur par défaut est 38  Exemple: v_note NUMBER(2,1) :=10.5; v_note NUMBER:=9.05; v_note NUMBER (2):=10; – même que la déclaration NUMBER(2,0) 43
  • 43. LES TYPES DE DONNÉES LES TYPES CARACTÈRE ET CHAINE DE CARACTÈRES  Les types de données caractères permettent de stocker des données alphanumériques, représenter des mots et du texte, et de manipuler des chaînes de caractères.    CHAR VARCHAR2 … 44
  • 44. LES TYPES DE DONNÉES LES TYPES CARACTÈRE ET CHAINE DE CARACTÈRES  CHAR  Le type de données CHAR est utilisé pour stocker des caractères (de longueur fixe), CHAR[(max_size )] – max_size comprise entre 1 et 32767 (par défaut égale à 1).  Exemple v_char CHAR :='A'; v_string CHAR(5) :='SALAM'; 45
  • 45. LES TYPES DE DONNÉES LES TYPES CARACTÈRE ET CHAINE DE CARACTÈRES  VARCAHR2:   Le type de données VARCHAR2 est utilisé pour stocker les données de type chaine de caractères Le type de données VARCHAR2 prend un paramètre obligatoire qui spécifie une taille maximale qui peut aller de 1 à 32767 octets VARCHAR2(maximum_size); NB: on ne peut pas insérer des valeurs VARCHAR2 plus grandes que 4000 octets dans une colonne de type VARCHAR2 d’une base de données. 46
  • 46. LES TYPES DE DONNÉES TYPES POUR LES GRANDS OBJETS (LOB LARGE OBJECT) Les types de données LOB (large object) permettent de stocker jusqu'à quatre giga-octets, en taille, de blocs de données non structurées (comme des textes, images graphiques, clips vidéo et des signaux sonores).  Et, ils permettent un accès par morceaux efficace, et non séquentiel, aux données.     BFILE: utilisé pour stocker de grands objets binaires dans des fichiers systèmes BLOB: utilisé pour stocker de grands objets binaires dans la base de données CLOB: utilisé pour stocker de grands blocs de données de types caractères dans la base de données 47
  • 47. LES TYPES DE DONNÉES LES TYPES BOOLÉENS  PL/SQL propose un type pour représenter des valeurs booléennes (vrai et faux).  Le type de données BOOLEAN peut être utilisé pour stocker les valeurs logiques VRAI, FAUX, et NULL.  Du fait que SQL ne dispose pas d'un type équivalent, on ne peut utiliser des variables booléennes que dans des contextes PL/SQL, mais pas à l'intérieur des requêtes SQL. 48
  • 48. LES TYPES DE DONNÉES LES TYPES DATE ET TIMESTAMP  DATE:  Utilisé pour stocker des variables datetimes de longueur fixe, qui inclut le moment de la journée en secondes depuis minuit. Par défaut, la valeur du jour est le premier jour du mois en cours, la valeur de l’heure égale à minuit,  Sous oracle, la fonction date SYSDATE renvoie la date et l'heure courante.  49
  • 49. LES TYPES DE DONNÉES LES TYPES DATE ET TIMESTAMP  DATE:  PL/SQL propose des fonctions pour la manipulation des dates Nom de la fonction Description ADD_MONTHS (date, nbre_de_moi) Ajoute un nombre spécifié de mois à une date. Retourne le dernier jour du mois de la date spécifiée. LAST_DAY ( date ) MONTHS_BETWEEN ( date2, date1 ) Calcule le nombre de mois entre deux dates. NEXT_DAY( date, 'jour' ) Date du prochain jour après date où jour est un jour de la semaine 50
  • 50. LES TYPES DE DONNÉES LES TYPES DATE ET TIMESTAMP  DATE:  Exemples DECLARE v_date DATE :='01-10-2010'; BEGIN DBMS_OUTPUT.PUT_LINE(ADD_MONTHS(v_date,3)); -- 01/01/11 DBMS_OUTPUT.PUT_LINE(LAST_DAY(v_date)); -- 31/10/10 DBMS_OUTPUT.PUT_LINE(MONTHS_BETWEEN(v_date, ADD_MONTHS(v_date,-2))); -- 2 DBMS_OUTPUT.PUT_LINE(NEXT_DAY(v_date, 'Lundi')); -- 04/10/10 End; /  On peut tester ces fonctions directement en utilisant la table system dual: 51  SELECT SYSDATE from dual;  SELECT NEXT_DAY( '31/12/2013', 'Lundi' ) from dual ;
  • 51. LES TYPES DE DONNÉES LES SOUS-TYPES Un sous-type n’introduit pas un nouveau type mais en restreint (limite) un existant.  PL/SQL propose plusieurs sous-types prédéfinis et il est possible de définir des sous-types personnalisés Sous-type Type restreint Caractéristiques CHARACTER CHAR Mêmes caractéristiques. INTEGER NUMBER(38,0) Entiers. BINARY_INTEGER NUMBER …. NATURAL, POSITIVE NATURALN, POSITIVEN Non négatif. BINARY_INTEGER SIGNTYPE DEC, DECIMAL, NUMERIC Non négatif et non nul. Domaine de valeurs {–1, 0, 1}. NUMBER Décimaux, précision de 38 chiffres. 52
  • 52. LES TYPES DE DONNÉES PERSONNALISER UN TYPE  Il est possible de définir un sous-type (dit «personnalisé» car n’existe que durant le programme) par la syntaxe suivante : SUBTYPE nomSousType IS typeBase[(contrainte)] [NOT NULL];   typeBase est un type prédéfini ou personnalisé. contrainte s’applique au type de base et concerne seulement la précision ou la taille maximale. DECLARE SUBTYPE dateNaiss_sty IS DATE NOT NULL; SUBTYPE insee_sty IS NUMBER(13); SUBTYPE nombre_sty IS NUMBER(2,2); 53
  • 53. LES TYPES DE DONNÉES TYPES DÉRIVÉS  Pour faciliter la maintenance du code qui interagit avec la base de données, on peut également utiliser des types qui sont dérivés de la base sans à les connaitre. Ainsi, on peut utiliser les deux attribues:   %TYPE, %ROWTYPE 54
  • 54. LES TYPES DE DONNÉES TYPES DÉRIVÉS  %TYPE  L’attribut %TYPE fait référence à un type existant qui est soit une colonne d'une table soit un type défini précédemment.  Il fournit le type de données d'une variable ou une colonne de base de données.  Cela est particulièrement utile lorsqu’on déclare des variables qui vont contenir des valeurs de la base de données. 55
  • 55. LES TYPES DE DONNÉES TYPES DÉRIVÉS  %TYPE  Exemple: DECLARE v_adresse T_utilisateurs.adresses%TYPE;  Déclarant v_adresse avec %TYPE a deux avantages. 1. On n’est pas obligé de savoir exactement le type de données du champ adresses de la table T_utilisateurs 2. Si on modifie la définition du champ adresses dans la table T_utilisateurs (changer la taille ou le type) de la base de données, le type de la variable v_adresse va changer au moment de l'exécution. 56
  • 56. LES TYPES DE DONNÉES TYPES DÉRIVÉS  %ROWTYPE  L'attribut %ROWTYPE fournit un type d'enregistrement qui représente une ligne dans une table. L’enregistrement peut stocker une ligne entière sélectionnée à partir d’une table ou récupérée à partir d'un curseur ou variable de curseur. Les éléments de cet enregistrement correspondants portent le même nom et type de données. 57
  • 57. LES TYPES DE DONNÉES TYPES DÉRIVÉS  %ROWTYPE DECLARE rty_utilisateurs T_utilisateur%ROWTYPE; -- on déclare une variable type enregistrement    Ici, nous avons déclaré un enregistrement nommé rty_utilisateurs. Les champs de cet enregistrement ont les mêmes noms et types de données que les colonnes dans la table T_utilisateur. L’enregistrement peut contenir toutes les colonnes d’une table ou seulement certaines. Nous détaillerons, dans la suite, le mécanisme des curseurs (CURSOR) qui emploient beaucoup cette directive. Pour accéder à un champ on utilise la notation du « point » comme sur l’exemple suivant: 58 v_ID :=rty_utilisateurs.ID ; -- ID est le nom d’un champ dans la table T_utilisateur
  • 58. LES TYPES DE DONNÉES TYPES DÉRIVÉS  %ROWTYPE  Exemple: DECALRE rty_utilisateurs T_utilisateur%ROWTYPE; -- on déclare une variable type enregistrement v_ID T_utilisateur.ID%TYPE ; BEGIN SELECT * INTO rty_utilisateurs FROM T_utilisateur where ID=5 ; v_ID :=rty_utilisateurs.ID; rty_utilisateurs.Nom := Tarik ; rty_utilisateurs.Prénom := Ilias ; -- Insertion dans la table T_utilisateur à partir d’un enregistrement. INSERT INTO T_utilisateur VALUES rty_utilisateurs ; END ; NB: Les colonnes récupérées par la directive %ROWTYPE n’héritent pas des contraintes NOT NULL qui seraient éventuellement déclarées au niveau de la table. 59
  • 59. LES TYPES DE DONNÉES TYPES COMPOSÉS  RECORD  Le type de données RECORD (disponible depuis la version 7) définit nos propres structures de données (l’équivalent du struct en C).  La syntaxe pour déclarer une variable de type RECORD est la suivante : TYPE nomRecord IS RECORD ( nomChamp typeDonnées [[NOT NULL] {:= | DEFAULT} expression] [,nomChamp typeDonnées… ]… ); 60
  • 60. LES TYPES DE DONNÉES TYPES COMPOSÉS  RECORD  Exemple: DECLARE /* Déclaration d’un RECORD contenant 3 champs, dont un est non nul avec initialisation du champ qtyInStock */ TYPE R_product IS RECORD (id NUMBER, identifiant CHAR(15) NOT NULL, qtyInStock NUMBER := 50); r_produit R_product; BEGIN -- Affectation d’un record r_produit.id:=5; r_produit.identifiant :=’Lait’ ; r_produit.qtyInStock :=150 ; 61 END;
  • 61. LES TYPES DE DONNÉES TYPES COMPOSÉS  RECORD:   NB1: Les types RECORD ne peuvent pas être stockés dans une table de la base de données. NB2: Il est possible qu’un champ d’un RECORD soit luimême un RECORD (nested record), ou soit déclaré avec les directives %TYPE ou %ROWTYPE. TYPE R_product IS RECORD (id NUMBER, identifiant CHAR(15) NOT NULL, qtyInStock NUMBER := 50); TYPE R_stock IS RECORD (produit R_product, fournisseur T_ fournisseur%ROWTYPE, employe T_employe.id%TYPE) ; 62 NB : Les RECORD ne peuvent pas être comparés (nullité, égalité et inégalité).
  • 62. CONVERSION DE TYPES DE DONNÉES EN PL/SQL  Parfois, il est nécessaire de convertir une valeur d'un type de données à un autre. Par exemple, pour utiliser une date dans un rapport, il faut la convertir en une chaîne de caractères.  PL/SQL supporte à la fois la conversion explicite et implicite (automatique) de types de données.  Il est préférable d’utiliser la conversion explicite pour s’assurer du bon fonctionnement de notre programme. 63
  • 63. CONVERSION DE TYPES DE DONNÉES EN PL/SQL CONVERSION EXPLICITE On utilise des fonctions fournies pas PL/SQL. Exemple:   Pour convertir une valeur CHAR en une valeur DATE ou NUMBER, on utilise respectivement les fonctions TO_DATE ou TO_NUMBER, Exemple DECLARE v_chr1 CHAR :=‘1’; v_nbr1 NUMBER; BEGIN v_nbr1 := TO_NUMBER(v_chr1); dbms_output.put_line( ‘TO_NUMBER ( ‘||v_chr1|| ‘) =‘ || v_nbr1 ) ; END; 64
  • 64. CONVERSION DE TYPES DE DONNÉES EN PL/SQL CONVERSION EXPLICITE  Quelques fonctions de conversion BIN_TO_NUM( bit [,bit[...]] ) Conversion d'une BIN_TO_NUM(1,0,1,0)  10 suite de bits en nombre TO_CHAR( date [, 'format' ] ) TO_CHAR( nombre [, 'format' ] ) Transformation d'un type DATE ou NUMBER en chaîne TO_CHAR( SYSDATE, 'DD/MM/YYYY HH24:MI:SS' )  18/10/2010 00:27:28 TO_DATE( nombre [, 'format' ] ) TO_DATE( chaîne [, 'format' ] ) Transformation d'un type NUMBER ou CHAR ou VARCHAR2 en date TO_DATE( '18/11/2010', 'DD/MM/RR' )  18/11/10 65
  • 65. CONVERSION DE TYPES DE DONNÉES EN PL/SQL CONVERSION IMPLICITE Quand il est logique, PL/SQL peut implicitement convertir le type de données d'une valeur. Exemple 1:  DECLARE v_chr1 CHAR :=‘1’; v_nbr1 NUMBER; BEGIN v_nbr1 := v_chr1; dbms_output.put_line( v_nbr1 ) ; END; Exemple 2: DECLARE v_bl BOOLEAN; begin v_bl:=1; -- renvoie une erreur “expression du mauvais type » end; 66
  • 66. QUELQUES OPÉRATEURS: LES OPERATEURS LOGIQUES  Les operateurs logiques AND, OR et NOT suivent la logique des trois états indiqués dans le tableau cidessous. AND et OR sont des opérateurs binaires; NOT est un opérateur unaire. L’opérateur AND L’opérateur OR L’opérateur NOT TRUE FALSE NULL TRUE TRUE FALSE NULL FALSE FALSE FALSE FALSE NULL NULL FALSE NULL TRUE FALSE NULL TRUE TRUE TRUE TRUE FALSE TRUE FALSE NULL NULL TRUE NULL NULL FALSE NULL TRUE FALSE TRUE TRUE FALSE TRUE FALSE NULL NULL NULL NULL NULL 67
  • 67. QUELQUES OPÉRATEURS: OPÉRATEURS ARITHMÉTIQUES Operateur Signification = Egal à <>, !=, ~=, ^= Non égal à < Inférieur à > Supérieur à <= Inférieur ou égal à >= Supérieur ou égal à 68
  • 68. QUELQUES OPÉRATEURS: OPÉRATEUR DE CONCATÉNATION  Les double-barres verticales (||) servent comme opérateur de concaténation entre chaines de caractères 69
  • 69. EXERCICE:  Ecrire un bloc PL/SQL pour: Demander de saisir le nom à la console  Afficher le nombre de caractères du nom saisi NB:            Utiliser un fichier  Pour ouvrir un fichier: ed nom_fichier  Pour executer un fichier: @nom_fichier ou bien start nom_fichier Pour afficher un message à la console, utiliser commande SQL*PLUS: PROMPT « Texte à Afficher » Pour récupérer ce qui est saisi par l’utilisateur, utiliser la commande SQL*PLUS: Accept nom_var  Pour utiliser la variable nom_var dans un bloc pl/sql: ‘&nom_var’ Utiliser une variable de type NUMBER(38,0) qui va contenir la longueur de la chaine de caractères Utiliser la fonction length(chaine) pour calculer la longueur de la chaine Pour afficher un message à la console utiliser la fonction: DBMS_OUTPUT.PUT_LINE (texte à afficher) Pour convertir un chiffre en un caractère, utiliser la fonction TO_CHAR() L’opérateur de concaténation est: || Pour activer l’affichage à la console, utiliser la commande: 70 SET SERVEROUTPUT ON Pour désactiver l’affichage des vérifications SET VERIFY OFF
  • 70.  Correction -- configuration de la console SQL*PLUS SET SERVEROUTPUT ON SET VERIFY OFF PROMPT entrer un nom ACCEPT var -- Code PL/SQL DECLARE lg number; BEGIN lg :=length ('&var'); dbms_output.put_line( 'le nombre de caractères dans '|| '&var' || ' est ' || TO_CHAR(lg)) ; 71 END; /

×