Vous êtes sur la page 1sur 20

Les sous-programmes

Chapitre 5

1 Dr Héla GOUIDER Bases de Données avancées


Introduction
 Dans les précédents chapitres. nous avons présenté des exemples de
programmes PL/SQL qui ne peuvent pas être partagés.

 Le langage PL/SQL est un langage algorithmique complet.

 Il bénéficie de la possibilité de structuration du code. avec un


procédé de décomposition de gros blocs de code en plus petits
modules qui peuvent être appelés par d'autres modules.

2 Dr Héla GOUIDER Bases de Données avancées


Les sous-programmes
 Le PL/SQL fournit les structures suivantes. qui permettent de
structurer le code de différentes façons :

 Bloc Anonyme: Un bloc PL/SQL non nommé qui exécute une ou plusieurs
actions. Un bloc anonyme permet au développeur de contrôler la portée
des identifiants et la gestion des exceptions.

 Procédure: Un bloc PL/SQL nommé qui exécute une ou plusieurs actions et


est appelé comme une commande PL/SQL. On peut passer et récupérer de
l'information d'une procédure à travers sa liste d'arguments.

 Fonction: Un bloc PL/SQL nommé qui renvoie une seule valeur et est utilisé
comme une expression PL/SQL. On peut passer de l'information à une
fonction à travers sa liste d'arguments.

 Package: Un ensemble nommé de procédures, fonctions, types et variables.


Un package n'est pas vraiment un module, c'est une application.

3 Dr Héla GOUIDER Bases de Données avancées


Les sous-programmes
 Un bloc peut contenir des sous-blocs imbriqués, chacun ayant sa propre
portée.
 Tous les différents types de modules ont une structure de bloc commune:
 En-tête: Seulement utile pour les blocs nommés. l'en-tête indique comment un
bloc nommé ou un programme doit être appelé.
 Section de Déclaration: La partie du bloc PL/SQL qui contient les déclarations
de variables, curseurs et sous-blocs qui sont référencés dans les sections
d'exécution et de gestion des exceptions.
 Section d'Exécution: La partie du bloc PL/SQL qui contient les commandes
exécutables, le code exécuté par le moteur PL/SQL. Tout bloc doit comprendre
au moins une commande exécutable dans la section d'exécution.
 Section des Exceptions: La section qui gère les exceptions au déroulement
normal du programme. Cette section est optionnelle. Cette section gère alors
les erreurs et passe la main au bloc appelant.

4 Dr Héla GOUIDER Bases de Données avancées


Les blocs nommés
 Les blocs PL/SQL nommés, les procédures et les fonctions, ont l'entête
du bloc qui contient la déclaration du nom et du type du bloc.

 Contrairement aux deux autres types de blocs PL/SQL nommés, le bloc


anonyme ne porte aucun nom; il utilise simplement le mot réservé
DECLARE pour marquer le début de sa section déclarative.

 En l'absence de nom, le bloc anonyme ne peut pas être appelé par un


autre bloc.
 Les blocs anonymes sont utilisés comme des scripts de commandes
PL/SQL, pouvant contenir des appels de procédures et de fonctions.
 Ils peuvent également servir de blocs imbriqués dans des procédures,
des fonctions ou d'autres blocs anonymes.

5 Dr Héla GOUIDER Bases de Données avancées


Les procédures
 Une procédure est un sous-programme qui effectue un traitement
particulier.

 Une procédure est un bloc PL/SQL comprenant une section déclarative.


une section exécutable et une section de gestion des exceptions. et comme
dans un bloc anonyme. seule la section exécutable est requise.

 Lorsqu'une procédure est créée. elle est d'abord compilée puis stockée
dans la base de données sous sa forme compilée.

 Ce code compilé peut ensuite être exécuté à partir d'un autre bloc PL/SQL

 le code source de la procédure est également stocké et n'a nul besoin


d'être analysé une seconde fois à l'exécution.

6 Dr Héla GOUIDER Bases de Données avancées


Les procédures
Syntaxe:
CREATE [OR REPLACE] PROCEDURE NOM_PROCEDURE
[{NOM_ARGUMENT [{IN | OUT | IN OUT}] TYPE [,...])]
{IS | AS}
BEGIN
………….
EXCEPTION
……………….
END [NOM_PROCEDURE];
 OR REPLACE: Cette option permet d'effectuer en une seule opération la
modification du code d'une procédure qui implique la suppression de la
procédure, puis sa recréation.
 NOM_PROCEDURE: C'est le nom de la procédure; il est placé directement
après le mot clé PROCEDURE.
 NOM_ARGUMENT: Liste optionnelle des arguments définis pour transférer de
l'information à la procédure, et pour récupérer de l'information à partir du
programme appelant.
 IS | AS: Les deux mot clés sont équivalents; ils déterminent le début de la section
des déclarations.

7 Dr Héla GOUIDER Bases de Données avancées


Les procédures
Remarques
 La section déclarative est située entre les mots-clés IS ou AS et le mot-clé BEGIN.

 La section exécutable. la seule qui soit requise, est située entre les mots-clés BEGIN
et EXCEPTION.

 Notez que le mot-clé DECLARE n'est pas inclus dans une déclaration de procédure
ou de fonction. Le mot-clé utilisé ici est IS ou AS.

 La création de la procédure n'implique pas l'exécution du code; elle est d'abord


compilée puis stockée dans la base de données sous sa forme compilée, le code
compilé pouvant ensuite être exécuté à partir d'un autre bloc PL/SQL.

8 Dr Héla GOUIDER Bases de Données avancées


Les procédures
 Appel de procédure
 On appelle une procédure comme on appelle une commande exécutable
PL/SQL.
 Un appel de procédure doit se terminer par un point virgule (; )
 Syntaxe:

NOM_PROCEDURE [(VALEUR_ARGUMENT [,….])];

Remarque:
 Si la procédure n'a aucun argument. il faut l'appeler sans parenthèse ou
sans aucun argument entre les parenthèses.

9 Dr Héla GOUIDER Bases de Données avancées


Les fonctions
 Une fonction est très semblable à une procédure.

 La différence entre une procédure et une fonction réside en ce qu'un appel de


procédure est en soi une instruction PL/SQL. tandis qu'un appel de fonction fait
partie d'une expression.

 Syntaxe :
CREATE [OR REPLACE] FUNCTION NOM FONCTION
[(NOM_ARGUMENT [{IN | OUT | IN OUT}] TYPE [,...])]
RETURN TYPE_VALEUR
{IS | AS}
BEGIN
………………..
RETURN EXPRESSION ;
EXCEPTION
END [NOM_FONCTION];
10 Dr Héla GOUIDER Bases de Données avancées
Les fonctions
 Instruction RETURN
 Une fonction doit contenir au moins une clause RETURN dans sa section
d'exécution.
 Elle peut contenir plus d'une clause RETURN, mais seul l'un d'eux est exécuté à
chaque appel de la fonction.
 La clause RETURN qui est exécutée par la fonction détermine la valeur
renvoyée par cette fonction.
 Lorsqu'un RETURN est exécuté, la fonction s'arrête immédiatement et rend le
contrôle au bloc PL/SQL appelant.
 Si l'expression n'est pas du type spécifié dans la clause RETURN de la définition
de la fonction, une conversion dans ce type est effectuée.

 Remarque
 La clause RETURN peut être utilisée dans les procédures; cette syntaxe ne
comporte aucune expression et par conséquent ne retourne aucune valeur. Elle
est utilisée pour arrêter tout simplement l'exécution de la procédure et rend le
contrôle au programme appelant.

11 Dr Héla GOUIDER Bases de Données avancées


La suppression des blocs
 Comme les tables, les procédures et les fonctions peuvent faire l'objet d'une
suppression, provoquant leur élimination du dictionnaire de données.
 Syntaxe:

DROP PROCEDURE NOM_PROCEDURE;


DROP FUNCTION NOM_FONCTION ;

 L'instruction DROP est une commande LDD, aussi un COMMIT implicite est
effectué tant avant qu'après l'instruction.

12 Dr Héla GOUIDER Bases de Données avancées


Les arguments
 Comme dans tout autre L3G. vous pouvez créer des procédures et des fonctions
qui reçoivent des arguments ayant différents modes et dont le passage se fera par
valeur ou par référence.
 Les arguments contiennent les valeurs passées au bloc lors de son appel. et ils
peuvent recevoir ensuite les résultats générés par celle-ci lorsqu‘elle se termine.

 Ce sont les valeurs de ces arguments qui sont utilisés dans la procédure.
 Les arguments formels servent de conteneurs pour les valeurs des arguments réels.
 Lorsque la procédure est appelée. les arguments formels se voient assigner les
valeurs des arguments réels.
 Une fois la procédure terminée, les valeurs contenues dans les arguments formels
sont repassées aux arguments réels.
 Ces affectations respectent les règles PL/SQL, incluant toute conversion de type
nécessaire.
 Les arguments formels peuvent avoir trois modes: IN, OUT ou IN OUT. IN étant la
valeur par défaut.

13 Dr Héla GOUIDER Bases de Données avancées


Les arguments
 Syntaxe:

NOM_ARGUMENT [ {IN | OUT | IN OUT}] TYPE

 lN: la
valeur de l'argument réel est passée à la procédure lors de son invocation. A l'intérieur
de celle-ci, l'argument formel se comporte comme une constante PL/SQL, à savoir qu'il est en
lecture seule et ne peut donc être modifié. Lorsque la procédure se termine et que le
contrôle repasse à l'environnement appelant, l'argument réel n'est pas modifié.

 OUT: La valeur de l'argument réel est ignorée lors de l'invocation de la procédure. À l'intérieur
de celle-ci, l'argument formel se comporte comme une variable PL/SQL n'ayant pas été
initialisée, contenant donc la valeur NULL et supportant les opérations de lecture et
d'écriture. Au terme de la procédure et au retour du contrôle à l'environnement appelant, le
contenu de l'argument formel est affecté à l'argument réel.

 lN OUT Ce mode est une combinaison de IN et OUT. La valeur de l'argument réel est
transmise à la procédure lors de son invocation. Au terme de la procédure et au retour du
contrôle à l'environnement appelant, le contenu de l'argument formel est affecté à l'argument
réel.

14 Dr Héla GOUIDER Bases de Données avancées


Les arguments
 Comme lors de la déclaration de variables, les arguments formels d'une
procédure ou d'une fonction peuvent avoir des valeurs par défaut
 Lorsqu'un argument réel est passé, sa valeur vient remplacer la valeur
par défaut de l'argument formel.
 La syntaxe suivante est utilisée pour attribuer à un argument une valeur
par défaut:

NOM ARGUMENT [{lN | OUT | lN OUT}] TYPE


[{ := | DEFAULT } VALEUR_DEFAUT]

15 Dr Héla GOUIDER Bases de Données avancées


Les arguments: notation positionnelle et
nommée

Le langage PL/SQL vous donne la possibilité d'associer les arguments réels aux
arguments formels :

 Association par position.


 Chaque argument est remplacé par la valeur occupant la même position dans la liste.
 Les arguments doivent être renseignés obligatoirement s'il n'y a pas de valeur par
défaut déclarée.
 Les arguments associés par position sont affectés dans l'ordre de leur déclaration.Vous
ne pouvez pas affecter le deuxième sans renseigner le premier.

 Association par nom.


 Dans ce cas, chaque argument peut être indiqué dans l'ordre quelconque en
faisant apparaître la correspondance de façon implicite sous la forme:
( NOM_ARGUMENT => VALEUR_ARGUMENT [, . . .] ) ;

16 Dr Héla GOUIDER Bases de Données avancées


Les arguments: passage par
valeur/référence
 Le passage d'un paramètre de sous-programme peut s'effectuer de deux
manières: par référence ou par valeur.

Par référence:
 un pointeur sur le paramètre réel est passé au paramètre formel
correspondant,
 la valeur du paramètre réel est copiée dans le paramètre formel.
 Le passage par référence, qui évite la copie, est généralement plus rapide,
particulièrement dans le cas de paramètres de collections.

 Par défaut, PL/SQL passera les paramètres IN par référence et les


paramètres IN OUT et OUT par valeur.

17 Dr Héla GOUIDER Bases de Données avancées


Les arguments: passage par
valeur/référence
 Oracle dispose d'un indicateur de compilation., appelé NOCOPY.
 Syntaxe:

NOM_ARGUMENT [{IN | OUT | IN OUT}] [NOCOPY] TYPE [,...]

 La présence de NOCOPY indique au compilateur PL/SQL de passer le


paramètre par référence plutôt que par valeur.

 L'avantage principal dont NOCOPY permet de bénéficier est, dans certains


cas, une amélioration des performances, amélioration particulièrement
sensible lors du passage de tables PL/SQL volumineuses.

18 Dr Héla GOUIDER Bases de Données avancées


La surcharge de blocs
 Deux ou plusieurs blocs peuvent avoir le même nom et une liste différente de
paramètres.

 De tels modules (procédures ou fonctions) sont dits surchargés.

 Le code de ces programmes peut être très semblable ou bien complètement


différent.

 Le compilateur compare le paramètre réel aux paramètres des listes des deux
modules et il exécute alors le code du programme dont l'en-tête correspond.

 Un exemple de programme surchargé en PL/SQL est la fonction TO_CHAR.


Cette fonction peut être utilisée pour convertir à la fois les nombres et des
dates au format caractère.
 En d'autres termes, il existe deux fonctions TO_CHAR différentes.
 La surcharge ne fait que rendre ce fait transparent pour les développeurs.

20 Dr Héla GOUIDER Bases de Données avancées


Le débogage des bloc
 La commande «SHOW ERRORS» affiche toutes les erreurs associées au
dernier objet procédural créé. Cette commande extrait de la vue du
dictionnaire de données USER_ERRORS les erreurs associées à la tentative
de compilation la plus récente pour cet objet.
 Elle indique aussi les numéros de la ligne et de la colonne pour chaque
erreur ainsi que le texte du message d'erreur.
 Pour visualiser les erreurs associées à des objets procéduraux qui ont été
créés, vous pouvez donc interroger directement la vue USER_ERRORS.

 La vue USER_OBJECTS contient les informations concernant chacun des


objets, y compris les sous-programmes stockés que possède l'utilisateur
courant.
 La vue USER_SOURCE contient le code source d'origine de l'objet.

21 Dr Héla GOUIDER Bases de Données avancées

Vous aimerez peut-être aussi