Vous êtes sur la page 1sur 19

PL/SQL

Razvan Bizo

Oracle 10g

pour

Tsoft et Groupe Eyrolles, 2007, ISBN : 2-212-12056-7, ISBN 13 : 978-2-212-12056-1

Larchitecture PL/SQL Le jeu de caractres Le bloc PL/SQL Sortie lcran Dboguage

Module 1 : Prsentation du PL/SQL


Objectifs
A la fin de ce module, vous serez mme deffectuer les tches suivantes : Dcrire la syntaxe PL/SQL. crire un bloc PL/SQL. Afficher les informations de dboguage. Utiliser Oracle SQL Developer pour crire des programmes SQL et PL/SQL.

Contenu
Pourquoi PL/SQL Architecture PL/SQL La syntaxe PL/SQL Structure de bloc Bloc imbriqu Sortie l'cran Oracle SQL Developer SQL Developer Atelier

Tsoft/Eyrolles PL/SQL pour Oracle10g

1-1

Module 1 : Prsentation du PL/SQL

Pourquoi PL/SQL
Pourquoi PL/SQL ?
SQL ifthen SQL else SQL end if

SQL SQL SQL

TSOFT - ORACLE 10g SQL et PL*SQL

Module 23 : Prsentation PL/SQL - Diapo 23.2

Le langage SQL est un langage "ensembliste", c'est--dire qu'il ne manipule qu'un ensemble de donnes satisfaisant des critres de recherche. PL/SQL est un langage "procdural", il permet de traiter de manire conditionnelle les donnes retournes par un ordre SQL. Le langage PL/SQL, abrviation de "Procedural Language extensions to SQL", comme son nom l'indique, tend SQL en lui ajoutant des lments, tels que : Les variables et les types. Les structures de contrle et les boucles. Les procdures et les fonctions. Les types d'objets et les mthodes. Ce ne sont plus des ordres SQL qui sont transmis un un au moteur de base de donnes Oracle, mais un bloc de programmation. Le traitement des donnes est donc interne la base, ce qui rduit considrablement le trafic entre celle-ci et l'application. Combin l'optimisation du moteur PL/SQL, cela diminue les changes rseau et augmente les performances globales de vos applications. Toutes les bases de donnes Oracle comportent un moteur d'excution PL/SQL. Comme Oracle est prsent sur un trs grand nombre de plates-formes matrielles, le PL/SQL permet une grande portabilit de vos applications. Le langage PL/SQL est 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 dveloppement, en dehors de ceux d'Oracle, autorisent la programmation en PL/SQL dans la base de donnes. Ce chapitre prsente lenvironnement de dveloppement et lintgration du PL/SQL dans Oracle.

1-2

Tsoft/Eyrolles PL/SQL pour Oracle10g

Module 1 : Prsentation du PL/SQL

Architecture PL/SQL
Architecture PL/SQL
Application client
SQL
BLOC PL/SQL SQL

SQL

Moteur SQL

ifthen
SQL

else
BLOC PL/SQL

PL/SQL

Moteur PL/SQL

end if

TSOFT - ORACLE 10g SQL et PL*SQL

Module 23 : Prsentation PL/SQL - Diapo 23.3

Le moteur de base de donnes, Oracle, coordonne tous les appels en direction de la base. Le SQL et le PL/SQL comportent chacun un "moteur d'excution" associ, respectivement le SQL STATEMENT EXECUTOR et le PROCEDURAL STATEMENT EXECUTOR. Lorsque le serveur reoit un appel pour excuter un programme PL/SQL, la version compile du programme est charge en mmoire puis excute par les moteurs PL/SQL et SQL. Le moteur PL/SQL gre les structures mmoire et le flux logique du programme, tandis que le moteur SQL transmet la base les requtes de donnes. Le PL/SQL est utilis dans de nombreux produits Oracle, parmi lesquels : Oracle Forms et Oracle Reports ; Oracle Application Express Oracle Warehouse Builder ; Les programmes PL/SQL peuvent tre appels partir des environnements de dveloppement Oracle suivants : SQL*Plus ; Oracle Enterprise Manager; les prcompilateurs Oracle (tels que Pro*C, Pro*COBOL, etc.) ; Oracle Call Interface (OCI) ; Server Manager; Java Virtual Machine (JVM). Un bloc PL/SQL peut tre trait dans un outil de dveloppement Oracle (SQL*Plus, Oracle Forms, Oracle Reports). Dans ce cas, seules les instructions sont traites par le moteur PL/SQL embarqu dans l'outil de dveloppement, les ordres SQL incorpors dans les blocs PL/SQL sont toujours traits par la base de donnes.

Tsoft/Eyrolles PL/SQL pour Oracle10g

1-3

Module 1 : Prsentation du PL/SQL

La syntaxe PL/SQL
La syntaxe PL/SQL

BLOC PL/SQL SQL

ifthen
SQL

else
BLOC PL/SQL

end if

TSOFT - ORACLE 10g SQL et PL*SQL

Module 23 : Prsentation PL/SQL - Diapo 23.4

Tout langage de programmation possde une syntaxe, un vocabulaire et un jeu de caractres. Cette section prsente les caractres valides en PL/SQL ainsi que les oprateurs arithmtiques et relationnels quil accepte. Un programme PL/SQL est une srie de dclarations, chacune compose d'une ou plusieurs lignes de texte. Une ligne de texte est faite de combinaisons des caractres dcrits ci-aprs : Les lettres majuscules et minuscules : AZ et az Les chiffres entre 09 Les symboles suivants : ( ) + - * / < > = ! ~ ; : . @ % " ' # ^ & _ | { } ? [ ]

Les mots rservs


A B C D E F G H I L M N O ALL, ALTER, AND, ANY, ARRAY, ARROW, AS, ASC, AT BEGIN, BETWEEN, BY CASE, CHECK, CLUSTERS, CLUSTER, COLAUTH, COLUMNS, COMPRESS, CONNECT, CRASH, CREATE, CURRENT DECIMAL, DECLARE, DEFAULT, DELETE, DESC, DISTINCT, DROP ELSE, END, EXCEPTION, EXCLUSIVE, EXISTS FETCH, FORM, FOR, FROM GOTO, GRANT, GROUP HAVING IDENTIFIED, IF, IN, INDEXES, INDEX, INSERT, INTERSECT, INTO, IS LIKE, LOCK MINUS, MODE NOCOMPRESS, NOT, NOWAIT, NULL OF, ON, OPTION, OR, ORDER, OVERLAPS

1-4

Tsoft/Eyrolles PL/SQL pour Oracle10g

Module 1 : Prsentation du PL/SQL


P R S T U V W PRIOR, PROCEDURE, PUBLIC RANGE, RECORD, RESOURCE, REVOKE SELECT, SHARE, SIZE, SQL, START, SUBTYPE TABAUTH, TABLE, THEN, TO, TYPE UNION, UNIQUE, UPDATE, USE VALUES, VIEW, VIEWS WHEN, WHERE, WITH Note Dans le langage PL/SQL comme dans SQL, les majuscules sont traites de la mme manire que les minuscules, except lorsquelles reprsentent la valeur d'une variable ou une constante de type chane de caractres. Certains de ces caractres, qu'ils soient seuls ou combins d'autres, ont une signification spciale en PL/SQL. Le langage PL/SQL propose deux types de commentaires : Un commentaire mono-ligne commence par deux tirets -- et prend fin par la fin de la ligne.
SQL> SELECT NOM_CATEGORIE -- Commentaire mono-ligne 2 FROM CATEGORIES; NOM_CATEGORIE ------------------------Boissons Condiments ...

Un commentaire multi-lignes commence par /* et finit par */ . Tous les caractres compris entre ces deux symboles sont ignors par le compilateur.
SQL> SELECT NOM_CATEGORIE /* 2 3 4 FROM CATEGORIES; NOM_CATEGORIE ------------------------Boissons Condiments ... Commentaire muti-lignes suite commentaire */

Attention Le langage PL/SQL est une srie de dclarations et instructions. Chaque instruction se termine par ; elle peut tre rpartie sur plusieurs lignes, afin de la rendre plus lisible. Il est prfrable de ne pas avoir plus dune instruction ou dclaration par ligne.

Tsoft/Eyrolles PL/SQL pour Oracle10g

1-5

Module 1 : Prsentation du PL/SQL

Structure de bloc
Structure de bloc

BLOC PL/SQL
DECLARE

...
BEGIN

...
EXCEPTION

...
END;
TSOFT - ORACLE 10g SQL et PL*SQL Module 23 : Prsentation PL/SQL - Diapo 23.5

Le PL/SQL est un langage structur. Chaque lment de base de votre application est une entit cohrente. Le bloc PL/SQL vous permet de reflter cette structure logique dans la conception physique de vos programmes. Les programmes PL/SQL sont crits sous forme de blocs de code dfinissant plusieurs sections comme la dclaration de variables, le code excutable et la gestion d'exceptions (erreurs). Le code PL/SQL peut tre stock dans la base sous forme d'un sous-programme dot d'un nom ou il peut tre cod directement dans SQL*Plus en tant que "bloc de code anonyme", c'est--dire sans nom. Lorsqu'il est stock dans la base, le sous-programme inclut une section d'en-tte dans laquelle il est nomm, mais qui contient galement la dclaration de son type et la dfinition d'arguments optionnels. La structure type dun bloc PL/SQL est la suivante : [DECLARE] ... BEGIN ... [EXCEPTION] ... END ; DECLARE La section DECLARE contient la dfinition et linitialisation des structures et des variables utilises dans le bloc. Elle est facultative si le programme na aucune variable. La section corps du bloc contient les instructions du programme et la section de traitement des erreurs. Cette section est obligatoire et elle se termine par le mot cl END .

BEGIN

1-6

Tsoft/Eyrolles PL/SQL pour Oracle10g

Module 1 : Prsentation du PL/SQL


EXCEPTION La section EXCEPTION contient linstruction de gestion des erreurs. Elle est facultative.

Lorsque vous excutez une instruction SQL dans SQL*Plus, elle se termine par un point-virgule. II ne s'agit que de la terminaison de l'instruction, non d'un lment qui en est constitutif. A la lecture du point-virgule, SQL*Plus est inform que l'instruction est complte et l'envoie la base de donnes. Dans un bloc PL/SQL, tout au contraire, le point-virgule n'est pas un simple indicateur de terminaison, mais fait partie de la syntaxe mme du bloc. Lorsque vous spcifiez le mot-cl DECLARE ou BEGIN , SQL*Plus dtecte qu'il s'agit d'un bloc PL/SQL et non d'une instruction SQL. Il doit cependant savoir quand se termine le bloc. La barre oblique / , raccourci de la commande SQL*Plus RUN , lui en fournit l'indication. Instruction NULL prcise qu'aucune action ne doit tre entreprise et que l'excution du programme se poursuit normalement. Cest un moyen de rserver la place pour un ensemble de traitements futurs.
SQL> begin 2 null; 3 end; 4 / Procdure PL/SQL termine avec succs.

Dans lexemple prcdent, le bloc PL/SQL neffectue aucune opration.


SQL> begin 2 DELETE DETAILS_COMMANDES WHERE NO_COMMANDE > 11070; 3 INSERT INTO CATEGORIES VALUES 4 ( 9,'Cosmtiques','Produits beauts' ); 5 COMMIT; 6 end; 7 / Procdure PL/SQL termine avec succs.

Attention Le langage PL/SQL peut contenir les instructions SQL de type Langage de Manipulation de Donnes, mais il ne peut comporter aucune instruction du Langage de Dfinition de Donnes. De plus, la gestion de la transaction est identique quon travaille en SQL ou en PL/SQL.

Le mot cl PRAGMA
Le mot cl PRAGMA signifie que le reste de l'ordre PL/SQL est une directive de compilation. Les pragmas sont values lors de la compilation, elles ne sont pas excutables. Une pragma est une instruction spciale pour le compilateur. Egalement appele pseudo-instruction, la pragma ne change pas la smantique d'un programme. Elle ne fait que donner une information au compilateur. Le langage PL/SQL contient les pragmas suivantes : Tsoft/Eyrolles PL/SQL pour Oracle10g 1-7

Module 1 : Prsentation du PL/SQL


EXCEPTION_INIT indique au compilateur que l'on souhaite associer une exception dclare dans un programme un code d'erreur spcifique. RESTRICT_REFERENCES indique au compilateur un certain degr de puret pour pouvoir excuter une fonction stocke complexe directement dans un ordre SQL. SERIALLY_REUSABLE indique au moteur PL/SQL que les donnes de niveau package ne sont pas persistantes. AUTONOMOUS_TRANSACTION indique au compilateur que le bloc sexcute dans une transaction indpendante, une instruction COMMIT ou ROLLBACK excute dans le bloc nimpacte pas les autres transactions. Lexemple suivant montre lutilisation du bloc PL/SQL qui sexcute dans une transaction indpendante. La premire commande SQL efface les enregistrements de la table DETAILS_COMMANDES pour les numros de commandes suprieurs 11070. Le bloc PL/SQL insre un enregistrement dans la table CATEGORIES ; linsertion effectue dans une transaction indpendante est ensuite valide. Lannulation de leffacement des enregistrements de la table DETAILS_COMMANDES peut encore tre effectue.
SQL> DELETE DETAILS_COMMANDES WHERE NO_COMMANDE > 11070; 40 ligne(s) supprime(s). SQL> 2 3 4 5 6 7 8 declare pragma autonomous_transaction; begin INSERT INTO CATEGORIES VALUES ( 9,'Cosmtiques','Produits beauts' ); COMMIT; end; /

Procdure PL/SQL termine avec succs. SQL> ROLLBACK; Annulation (ROLLBACK) effectue. SQL> SELECT COUNT(*) FROM DETAILS_COMMANDES 2 WHERE NO_COMMANDE > 11070; COUNT(*) ---------40

1-8

Tsoft/Eyrolles PL/SQL pour Oracle10g

Module 1 : Prsentation du PL/SQL

Bloc imbriqu
Bloc imbriqu

BLOC PL/SQL

... BEGIN ...


BEGIN ...

DECLARE

BLOC PL/SQL DECLARE ...

EXCEPTION ...

... ...

END;

EXCEPTION END;
TSOFT - ORACLE 10g SQL et PL*SQL Module 23 : Prsentation PL/SQL - Diapo 23.6

Le PL/SQL permet d'imbriquer ou d'encapsuler des blocs anonymes dans d'autres blocs PL/SQL. On peut galement imbriquer des blocs anonymes dans d'autres blocs anonymes plusieurs niveaux. Un bloc PL/SQL imbriqu l'intrieur d'un autre bloc PL/SQL peut tre appel : Bloc imbriqu Bloc secondaire Bloc enfant Sous-bloc Un bloc PL/SQL qui appelle un autre bloc PL/SQL peut tre appel bloc principal ou bien bloc parent. Le principal avantage, et l'une des raisons de l'utiliser, du bloc imbriqu est qu'il fournit une porte tous les objets et toutes les commandes de ce bloc. Vous pouvez utiliser cette porte pour amliorer le contrle que vous avez sur les actions effectues par votre programme.

Tsoft/Eyrolles PL/SQL pour Oracle10g

1-9

Module 1 : Prsentation du PL/SQL

Sortie l'cran
Sortie l'cran

BLOC PL/SQL

... BEGIN ... ... ...

DECLARE

dbms_output.put_line ...
EXCEPTION END;

TSOFT - ORACLE 10g SQL et PL*SQL

Module 23 : Prsentation PL/SQL - Diapo 23.7

Le langage PL/SQL ne dispose d'aucune gestion intgre des entres/sorties. Il s'agit en fait d'un choix de conception, car l'affichage des valeurs de variables ou de structures de donnes n'est pas une fonction utile la manipulation des donnes stockes dans la base. La possibilit de grer les sorties a toutefois t introduite, sous la forme dune application intgre DBMS_OUTPUT ; elle est dcrite en dtail dans le chapitre concernant les applications standards Oracle. Lapplication DBMS_OUTPUT permet d'envoyer des messages depuis un bloc PL/SQL. La procdure PUT_LINE de cette application permet de placer des informations dans un tampon qui pourra tre lu par un autre bloc PL/SQL. Le principal intrt de ce package est de faciliter la mise au point des programmes. SQL*Plus, possde le paramtre SERVEROUTPUT qu'il faut activer, pour connatre les informations qui ont t crites dans le tampon, l'aide de la commande : SET SERVEROUTPUT ON [size taille ] Dans lexemple suivant, vous pouvez remarquer que, dans le bloc PL/SQL, il y a quatre ordres qui se terminent par un point virgule. La procdure PUT_LINE accepte comme argument, soit une expression de type chane de caractres, soit une expression numrique ou une expression de type date.
SQL> SHOW SERVEROUTPUT serveroutput OFF SQL> begin 2 dbms_output.put_line( 'Bonjour'); 3 end; 4 / Procdure PL/SQL termine avec succs. SQL> SET SERVEROUTPUT ON

1-10

Tsoft/Eyrolles PL/SQL pour Oracle10g

Module 1 : Prsentation du PL/SQL


SQL> begin 2 dbms_output.put_line( 'Bonjour utilisateur '||user|| 3 ' aujourd''hui est le '|| 4 to_char(sysdate,'dd month yyyy')); 5 dbms_output.put_line( uid); 6 dbms_output.put_line( user); 7 dbms_output.put_line( sysdate); 8 end; 9 / Bonjour utilisateur STAGIAIRE aujourd'hui est le 29 mai 2006 64 STAGIAIRE 29/05/06 Procdure PL/SQL termine avec succs.

Attention Vous pouvez visualiser le paramtre SERVEROUTPUT par la commande SQL*Plus SHOW . Ce paramtre est positionn par dfaut OFF . Attention, si les informations contenues dans le tampon dpassent la taille du tampon, le bloc va tre rejet avec un message derreur.

Tsoft/Eyrolles PL/SQL pour Oracle10g

1-11

Module 1 : Prsentation du PL/SQL

Oracle SQL Developer


Oracle SQL Developer

TSOFT - ORACLE 10g SQL et PL*SQL

Module 23 : Prsentation PL/SQL - Diapo 23.8

Il y a plusieurs outils qui permettent le dveloppement et le dboguage d'une application PL/SQL, chacun tant diversement dot d'avantages et d'inconvnients. Oracle SQL Developer est un environnement de dveloppement livr gratuitement par Oracle. Vous pouvez tlcharger le produit ladresse suivante : http://www.oracle.com/technology/products/database/sql_developer/index.html SQL Developer est dot des fonctionnalits suivantes : l'auto-formatage des instructions PL/SQL et SQL ; un dbogueur PL/SQL ; un navigateur de base de donnes ; le support des types d'objets d'Oracle; des modles de code ;

Connexion la base de donnes


SQL Developer peut supporter plusieurs connexions de base de donnes simultanes. Lorsque vous le lancez pour la premire fois, vous tablirez une connexion partir de menu File et New.

1-12

Tsoft/Eyrolles PL/SQL pour Oracle10g

Module 1 : Prsentation du PL/SQL


Ds qu'elle est tablie, une connexion demeure active jusqu' ce que vous la fermiez explicitement en slectionnant File et Close.

Une invite de connexion la base de donnes dans lequel vous pouvez mmoriser diffrents profils de connexion en y stockant l'identifiant utilisateur et les informations de connexion. Les profils de connexion sont automatiquement mmoriss pour un usage ultrieur, il est possible davoir en simultan des connexions multiples diffrentes bases de donnes.

Vous utiliserez la fentre du navigateur d'objets pour visualiser les informations concernant les objets de base de donnes. Vous pourrez, si vous le souhaitez, ouvrir plusieurs fentres SQL*Plus pour chaque connexion. Vous pouvez galement fermer un diteur SQL*Plus ou un autre diteur comme tout document dans un environnement multi-documents.

Tsoft/Eyrolles PL/SQL pour Oracle10g

1-13

Module 1 : Prsentation du PL/SQL

Navigation parmi les objets de base de donnes


SQL Developer vous permet de naviguer parmi les objets types d'Oracle tels que les tables, les vues, les procdures, les packages etc. La slection des types d'objets dans le panneau situ gauche, dclenche leur affichage dans le panneau de droite qui montre le dtail.

Vous pouvez modifier une table en cliquant sur le bouton :

1-14

Tsoft/Eyrolles PL/SQL pour Oracle10g

Module 1 : Prsentation du PL/SQL


Il est galement possible de modifier les donnes dune table.

Vous pouvez aussi rcuprer lordre LDD qui permet la cration de lobjet.

Tsoft/Eyrolles PL/SQL pour Oracle10g

1-15

Module 1 : Prsentation du PL/SQL

SQL Developer
SQL Developer

TSOFT - ORACLE 10g SQL et PL*SQL

Module 23 : Prsentation PL/SQL - Diapo 23.9

SQL Developer vous permet douvrir plusieurs SQL*Worksheet, des fentres ddition permettant de concevoir et dexcuter des commandes SQL et PL/SQL. Un assistant de code Snippets, accessible via le menu View, met votre disposition une bibliothque de structures SQL et PL/SQL d'utilisation courante. Lorsque vous slectionnez une structure particulire, vous pouvez la faire glisserdposer dans la fentre d'dition disponible.

De la mme manire, vous pouvez insrer le nom dune colonne ou la requte complte dinterrogation dune table dans la fentre d'dition disponible.

1-16

Tsoft/Eyrolles PL/SQL pour Oracle10g

Module 1 : Prsentation du PL/SQL


Lenvironnement de travail est un diteur contextuel qui vous permet davoir des aides contextuels pour lcriture du code.

Vous pouvez excuter un script SQL globalement ou tout simplement une partie de ce script en effectuant une slection de la partie quon veut excuter.

Vous pouvez galement excuter un script PL/SQL mais pour afficher le tampon, il faut activer le paramtre SERVEROUTPUT pour connatre les informations qui ont t crites dans le tampon.

Tsoft/Eyrolles PL/SQL pour Oracle10g

1-17

Module 1 : Prsentation du PL/SQL

Atelier
Atelier 23

La prsentation du PL/SQL

Dure : 10 minutes
TSOFT - ORACLE 10g SQL et PL*SQL Module 23 : Prsentation PL/SQL - Diapo 23.10

Questions
1-1. 1-2. 1-3. Quelles sont les sections qui font partie dun bloc ? Quel est le rle de la section DECLARE ? Quelles sont les syntaxes incorrectes ? A. declare begin NULL;begin NULL;begin NULL; end;end;end; B. declare NULL;begin NULL;begin NULL;end;end;end; C. declare begin NULL;begin NULL;begin NULL;end;end; D. declare begin NULL;begin begin NULL;end;end;end; E. declare begin NULL;begin NULL;begin NULL; end;NULL;end;NULL;end; 1-4. Quel est le symbole de fin dinstruction en PL/SQL ? A. . B. : C. ; D. ! 1-5. Quelles sont les syntaxes qui reprsentent des commentaires en PL/SQL ? A. /* Commentaire */ B. -- Commentaire --

1-18

Tsoft/Eyrolles PL/SQL pour Oracle10g