Sei sulla pagina 1di 19

Tutoriel : Procédure stockée file:///C:/Users/Administrator/Downloads/Tutoriel Procédure stocké...

Version en ligne (http://sdz.tdct.org/www.siteduzero.com/informatique/tutoriels/procedure-stockee)

Tutoriel : Procédure stockée


Table des matières
Procédure stockée
Procédures stockées : les bases
Les blocs d'instructions
Déclaration : variable, gestionnaire, curseur
Instructions de contrôle
Exemples

Procédure stockée
Vous avez vu la première partie : les requêtes préparées (http://www.siteduzero.com/tuto-3-4404-1-
mysql-requete-preparee.html) et vous avez adoré : alors vous allez aimer ça. :D
Les procédures stockées, apparues avec MySQL 5, sont ce que la caféine est au café, on peut boire le
café sans, mais ça ne serait pas aussi bon. :)

Cette partie de MySQL, qui n'est encore que trop peu utilisée, est un bon moyen de mettre en oeuvre
des scripts avancés qui, non content de pouvoir faire tout un tas d'actions, permettent une optimisation
des scripts, éventuellement une couche d'abstraction supplémentaire pour la programmation et, plus
basiquement, des requêtes qui sans cela seraient complexes et lourdes à mettre en oeuvre, voire
impossibles.
C'est donc en partant de ce constat que je vais m'efforcer de vous montrer tous ces points et bien plus ...

Pré-requis :
- MySQL 5.0 ou Supérieur
- avoir des connaissances de base sur MySQL est recommandé (savoir faire des SELECT, UPDATE,
INSERT, DELETE)
- des bases en algorithme pour faire vos propres scripts par la suite
- savoir utiliser MySQL en ligne de commande pour pouvoir effectuer les exercices.

Procédures stockées : les bases

Création d'une procédure


La syntaxe est relativement simple et se présente sous la forme suivante :

Le nommage respecte les règles habituelles, imaginons donc une procédure nommée 'sdz', elle sera créée
sous la forme :

Rien de compliqué jusque là, mais le point le plus important concerne les paramètres qui se décomposent en
trois parties.
sens_du_parametrenom_parametretype_parametre
Le sens du parametre peut prendre 3 valeurs :
IN : le paramètre sera une valeur ou une variable d'entrée. Le paramètre indiqué peut être une valeur ou une
variable que vous envoyez lors de l'appel, et qui sera utilisé à l'intérieur de la procédure.
OUT : le paramètre sera une variable de sortie. Le paramètre indiqué sera une variable (de session ou de
1 of 19 02/07/2015 10:39
Tutoriel : Procédure stockée file:///C:/Users/Administrator/Downloads/Tutoriel Procédure stocké...
procédure) qui prendra une valeur (enfin normalement, sinon ça n'a que peu d'intérêt) lors de la procédure.
INOUT : le paramètre sera une variable d'entrée-sortie. Cette variable pourra être utilisé ou non dans la
procédure, et verra normalement sa valeur modifiée lors de la procédure.
Le nom_parametre suit les règles de nommage habituel. Ce nom de paramètre représentera par la suite dans
la procédure une variable qui aura pour valeur celle qu'on lui aura assigné.
Si vous ne comprenez pas ce que ça veut dire, ce n'est pas grave, les exemples ci-dessous sont là pour ça. ;)
Le type_parametre prend en valeur le type de la valeur ou de variable attendu.
Avant de passer à la pratique, rappelons un point important : les procédures stockées sont, comme leur nom
l'indique, stockées... J'entends déjà des "on s'en serait douté". En fait, s'il est vrai qu'elles le sont, ceci
entraîne plusieurs choses importantes et qui font toute la puissance des procédures stockées. De par ce
statut, elles sont à tout moment utilisables ; ainsi, les déclarer une fois pour une base de données suffit pour
pouvoir les utiliser par la suite à tout moment. Contrairement aux requêtes préparées, elles ne dépendent pas
d'un thread et ne sont pas détruites automatiquement ; de même, elles restent présentes si le serveur s'arrête.

Ceux disposant de MySQL Query Browser (http://dev.mysql.com/downloads/query-browser/1.1.html) pourront


par la suite vérifier cet état de fait en ouvrant la base qu'ils ont utilisée, et verront apparaître en dessous des
tables, de nouvelles icônes qui, sur leur côté, porte le nom de la procédure concernée.
Passons maintenant aux exemples.

Pour commencer, nous allons changer le délimiteur de fin de requête utilisé, ceci non pas afin de vous
perturber mais tous simplement par commodité pour la suite. Pour ce faire, tapez ceci en ligne de commande
:

Désormais, quand vous terminerez une requête, il ne faudra plus faire ; mais |.
Première procédure
Nous allons créer une procédure qui nous renvoie la valeur que nous lui avons passée en paramètre.

Ceci est la structure complète d'une procédure : comme vous le voyez, ici apparaissent des choses dont je
n'ai pas encore parlé : BEGIN et END, qui permettent de mettre plusieurs instructions à l?intérieur. Et chaque
instruction à l?intérieur de ce bloc se termine bien par ;, qui n'est en rien une erreur car si nous avions laissé
notre délimiteur normal, alors ça n'aurait pas marché. Pour ceux qui ne me croient pas, je les invite à remettre
le délimiteur ; normal en faisant :

et à réessayer. :)
Dans ce bloc, nous voyons une instruction qui va chercher la valeur que nous avons passée en paramètre
d'entrée, et qui a été stockée dans la variable 'valeur'.
Voilà : vous avez fait votre première procédure, ô combien simpliste.

Appel d'une procédure


Nous avons vu dans la partie précédente comment créer une procédure, nous allons apprendre désormais à
l'appeler.
Pour cela rien de plus simple, tapez :

Si avez toujours le délimiteur |, vous ne devriez pas avoir de problème et en suivant les étapes depuis le
2 of 19 02/07/2015 10:39
Tutoriel : Procédure stockée file:///C:/Users/Administrator/Downloads/Tutoriel Procédure stocké...
début, vous aurez le résultat suivant :

Remarquez qu'ici l'appel est relativement simple, on peux complexifier la chose en partant du principe que
notre valeur est dans une variable : pour ce faire, on va déclarer une nouvelle variable '@a', à laquelle on
affectera une valeur :

Notre variable de session (http://www.siteduzero.com/tuto-3-6146-1-les-variables-utilisateur.html) vaut donc


désormais 666.
Bien ! Appelons notre procédure avec cette variable :

et la valeur qui va s'afficher est notre 666.

Tu ne nous avais pas dit qu'il existait autre chose que IN ?

Absolument, et maintenant que vous avez vu le principe de base, nous allons refaire une procédure mais qui
elle prendra en plus un paramètre de sortie. Pour l'occasion, on va faire un truc plus utile que précédemment.
:-°
Calculons le carré d'un nombre :

En plus, on a un deuxième paramètre qui recevra une variable qui servira pour la sortie, de type BIGINT.
Dans le bloc d'instructions, on a une requête qui prend la valeur d'entrée, la multiplie par elle-même et le
INTO va permettre de dire "stocke-moi le résultat ici", qui sera alors mis dans la variable locale 'toto'. Cette
variable n'est pas accessible en dehors.

Ouais : donc le résultat, on le récupère comment ?

Ah vous allez voir, c'est simple. :)


On appelle la procédure que l'on vient de créer comme ceci :

Là, on demande de calculer le carré de 2 en passant 2 à la valeur d'entrée, et on indique la variable '@b' qui
stockera le résultat pour la sortie : remarquez que cette variable est, dans ce cas-ci, globale à la session (ce
qui veut dire qu'une autre session peut très bien appeler la même procédure sans que les résultats ne
s'écrasent : donc, chaque résultat est lié à la session).

3 of 19 02/07/2015 10:39
Tutoriel : Procédure stockée file:///C:/Users/Administrator/Downloads/Tutoriel Procédure stocké...

J'ai fait comme toi mais il ne se passe rien... o_O

En fait c'est normal, la vraie magie c'est maintenant :

La requête retourne le résultat du calcul, c'est-à-dire : 4.


Si vous avez tout compris jusque là, alors rendez-vous à la suite.

Supprimer une procédure


Certainement la partie la plus courte du tutoriel. vous venez de créer deux procédures dans les parties
précédentes, bien : nous allons supprimer la première qui ne sert strictement à rien.

vous venez de supprimer votre procédure. Eh oui, c'est déjà fini... :lol:

| vaut ; si vous avez lancé une autre fenêtre ou relancé la fenêtre des parties précédentes.

Voir les procédures existantes


Vous souhaiterez certainement savoir par la suite comment lister les procédures que vous avez créées : pour
cela, rien de plus simple. Si vous voulez voir TOUTES les procédures de toutes les BDDs auxquelles vous
avez un accès, alors :

Remarquez dans ce cas que j'ai utilisé '%%' pour indiquer que je veux toutes les procédures (rien ne vous
empêche de mettre une expression qui corresponde plus à vos besoins) et \G comme délimiteur de fin de
requête pour avoir un affichage lisible humainement en ligne de commande.

4 of 19 02/07/2015 10:39
Tutoriel : Procédure stockée file:///C:/Users/Administrator/Downloads/Tutoriel Procédure stocké...

Vous remarquerez certainement le paramètre Security_type dont je n'ai pas encore parlé : sachez qu'il peut
être intéressant pour vous de le connaître tout comme la ligne : Definer, mais j'y reviendrai plus tard.
Avant de passer à la suite, je tiens à signaler que le LIKE '%%' n'est pas obligatoire dans ce cas, vous aurez
le même affichage sans. ;)

Affichage de la structure des procédures


Il est possible que vous ayez envie de voir à quoi ressemble votre procédure une fois que vous l'aurez créée :
pour cela, faites :

Vous devez connaître le nom de la procédure, et celle-ci doit se trouver dans la base de données courante : si
vous essayer d'appeler une procédure (que vous auriez vue par exemple grâce à la requête donnée en début
de cette partie) qui se trouve dans une autre base, vous aurez une erreur vous signalant que la procédure
n'existe pas.
Ceci paraît relativement logique dans la mesure où chaque base de données peut avoir des procédures qui,
dans ce cas, auront des noms communs.
Comme vous le remarquez, le code de la procédure apparaît avec d'autres renseignements. :)

5 of 19 02/07/2015 10:39
Tutoriel : Procédure stockée file:///C:/Users/Administrator/Downloads/Tutoriel Procédure stocké...

Les blocs d'instructions


Comme nous l'avons vu dans les parties précédentes, les blocs d'instructions permettent de délimiter une
zone d'instructions ; cependant, pour les autres parties du tuto, vous aurez besoin de comprendre son
fonctionnement afin de ne pas vous arracher les cheveux. :-°
La syntaxe que nous avons vue précédemment est la plus simple, à savoir un BEGIN pour signaler le début,
un END pour signaler la fin et l'instruction de fin de requête derrière le END pour fermer le bloc.
Cependant, pour la suite, vous aurez peut-être besoin d'attribuer un nom au bloc à fermer ; pour ce faire, vous
devez déclarer un label, ou si vous préférez, un nom pour le bloc.
Exemple :

Remarquez que le label de fin doit être le même que pour celui du début.
Maintenant voyons le comportement des variables locales dans un bloc. Cette variable locale (déclarée dans
une procédure, j'y reviendrai) a une 'durée de vie' et une 'visibilité'. Ces deux notions -à ne pas confondre-
sont ce qui est souvent source d'erreur.
Durée de vie : la variable existe de sa déclaration jusqu'à la fin du bloc la contenant.
Visibilité : espace où la variable peut être utilisée. La variable est visible jusqu'à la fin du bloc et passe
invisible dès qu'un nouveau bloc commence et ce, jusqu'à ce que le dit bloc se finisse.
Voici un petit schéma qui rendra les choses plus claires :

Enfin, on va faire un exemple qui permettra de lever d'éventuels doutes :

6 of 19 02/07/2015 10:39
Tutoriel : Procédure stockée file:///C:/Users/Administrator/Downloads/Tutoriel Procédure stocké...

Et on appelle ceci avec :

Ce qui donne le résultat suivant :

Déclaration : variable, gestionnaire, curseur

Variables
Lors d'une procédure, il est possible de déclarer des variables qui seront locales à la procédure, comme nous
l'avons dans la partie précédente ; ces variables ont une durée de vie et une visibilité dont le schéma suivant
est le récapitulatif :

7 of 19 02/07/2015 10:39
Tutoriel : Procédure stockée file:///C:/Users/Administrator/Downloads/Tutoriel Procédure stocké...

Pour créer une variable il faut utiliser la syntaxe :

Cependant ceci ne suffit pas : la déclaration des variables doit être faite impérativement derrière la déclaration
du bloc, donc derrière BEGIN.
Exemple :

Dans les procédures, il est tout à fait possible de mélanger les types de variables différentes, et mêmes de les
utiliser dans les requêtes.
De même, les variables ont des espaces de noms différents ; il est donc tout à fait possible d'avoir ceci :

Dans ce cas, les variables ont un nom identique, mais la première est une variable locale à la procédure et
l'autre, une variable globale à la session.

Gestionnaire
Lorsque vous écrirez des procédures, vous pourrez être confrontés à des problèmes de la forme suivante : "et
là, si je mets une valeur qui est déjà dans la base de données, comment faire pour que la procédure continue
sans s?arrêter ?".
C'est un exemple de problème qui ne peut se gérer qu'avec la déclaration d'un gestionnaire, qui permettra de
dire au programme : "continue d'exécuter la procédure et tais-toi", fort pratique pour éviter le comportement

8 of 19 02/07/2015 10:39
Tutoriel : Procédure stockée file:///C:/Users/Administrator/Downloads/Tutoriel Procédure stocké...
par défaut qui, lors d'une rencontre avec une erreur, sortira (EXIT) directement de la procédure.
Exemple :

Cet exemple, inspiré du manuel mais corrigé, essaie de mettre deux valeurs dans une table t ; seulement lors
du deuxième appel, une erreur de clé dupliquée sera générée dans ce cas-là si nous n'avions pas la ligne :

Le code s'arrêterait là et la ligne :

ne serait pas exécutée, ce qui n'est pas très pratique.

Ouais, mais alors, comment on fait ?

Vous allez voir, c'est pas trop compliqué : pour cela, on va suivre la syntaxe suivante :

Il existe deux types de gestionnaires actuellement supportés, qui sont :


EXIT : lors de la rencontre d'une erreur, la procédure s'arrête (comportement par défaut).
CONTINUE : lors de la rencontre d'une erreur, la procédure continue.

Si on avait mis EXIT à la place de CONTINUE dans l'exemple précédent, la phrase 'je suis 3' ne serait pas
apparue.

Vient ensuite condition_valeur qui est subtile dans la mesure où il existe plusieurs conditions possibles, et que
parmi elles, certaines reprennent un code d'erreur standard à SQL, les autres provenant du standard de
MySQL.
Par exemple : ci-dessus, j'ai mis la valeur 1062 qui correspond au code d'erreur MySQL pour les clés
dupliquées, mais j'aurais aussi bien pu utiliser le code d'erreur standard à la place, ce qui donne ceci :

Comme vous pouvez le remarquer, le mot clé SQLSTATE est venu en plus du code, et le numéro de l'erreur
est entouré ; si vous ne le faites pas, vous aurez une erreur. De même, si vous utilisez uniquement le code
d'erreur sans déclarer SQLSTATE, vous aurez aussi une erreur (l'erreur du manuel MySQL est là).
Il existe encore d'autres conditions :
SQLWARNING : raccourci pour tous les codes SQLSTATE qui commencent par 01.
NOT FOUND : raccourci pour tous les codes SQLSTATE qui commencent par 02.
SQLEXCEPTION : raccourci pour tous les codes SQLSTATE qui ne sont pas représentés par SQLWARNING
ou par NOT FOUND.

9 of 19 02/07/2015 10:39
Tutoriel : Procédure stockée file:///C:/Users/Administrator/Downloads/Tutoriel Procédure stocké...

Et si on veut plusieurs codes d'erreurs ?

C'est tout à fait possible, par exemple :

Vous avez donc vu tout ce qu'il est possible de faire avec les gestionnaires ; remarquez que la requête que j'ai
mise en fin est un exemple, vous pouvez tout à fait effectuer un autre traitement, voire même mettre des blocs
d'instructions.
Exemple :

Est-il possible d'avoir une gestion nominative des erreurs ?

Oui, ce qui permet d'ailleurs une meilleur lisibilité.


Reprenons notre code précédent et rajoutons-y ce qui manque :

10 of 19 02/07/2015 10:39
Tutoriel : Procédure stockée file:///C:/Users/Administrator/Downloads/Tutoriel Procédure stocké...
La nouvelle ligne est la suivante :

Détaillons-la donc selon sa syntaxe.

Nous définissons donc ici un nom qui sera utilisable quand la condition suivante est rencontrée. Dans notre
cas, nous avons dit d'associer 'condition_cle_duplique' à l'erreur de clé dupliquée (code d'erreur 23000 en
SQL Standard). Il est donc possible par la suite de donner ce nom plutôt qu'un nom peu parlant.
Le nom ainsi créé devra être appelé à la place du type d'erreur attendu dans :

Tout ceci vous permettra une meilleure conception de vos procédures, et surtout la possibilité de leur apporter
une certaine autonomie face aux erreurs.
Vous pouvez trouvez la liste des erreurs sur la documentation officielle (http://dev.mysql.com/doc/refman
/4.1/en/error-handling.html).

Curseur
Jusqu'à maintenant, ce que vous avez vu vous permet de construire des procédures relativement
intéressantes : cependant, vous serez vite confrontés au problème de la lecture des résultats lorsqu'une
requête SELECT renvoie plus d'une ligne.
Pour remédier à cela, il y a les curseurs qui pour le moment sont peu évolués (car ils sont en lecture seule et
non navigable) dans MySQL ; mais ils nous suffiront. :)

Imaginons que nous ayons une table de membres : nous souhaiterions lire l'identifiant et le mot de passe qui
y sont contenus, ce qui donne la chose suivante :

Première chose à remarquer, cette structure ne récupère que trois des lignes, ce qui n'est pour le moment que

11 of 19 02/07/2015 10:39
Tutoriel : Procédure stockée file:///C:/Users/Administrator/Downloads/Tutoriel Procédure stocké...
peu intéressant pour nous ; dans les parties suivantes, nous verrons comment simplifier ça tout en permettant
une lecture totale du jeu de résultats.
Première chose effectuée dans cet exemple après avoir déclaré deux variables locales qui nous resserviront
plus bas :

On demande la création d'un curseur nommé 'curseur1' qui va aller chercher le jeu de résultats correspondant
à la requête :
SELECT identifiant, mot_passe FROM membres;
Ensuite, afin de pouvoir utiliser notre jeu de résultats et parcourir ce qui est à l'intérieur, nous l'ouvrons avec
ceci :

S'ensuit la partie :

Nous lisons le résultat du curseur1 pour la ligne courante. Chaque appel à FETCH fait avancer d'une ligne
dans le jeu de résultats.
Nous affectons le résultat de cette ligne à nos variables.

Remarquez bien que les variables doivent être disposées dans le sens dans lequel on souhaite
récupérer les valeurs ; si dans le cas présent, nous avions inversé

avec

nous aurions alors eu les mots de passe stockés dans la variable qui étaient pour les identifiants, et
inversement.

Enfin, après avoir récupéré nos lignes, nous fermons le curseur1 à l'aide de :

Instructions de contrôle

IF
Vous souhaiteriez certainement dans certains cas vérifier des valeurs et effectuer des actions en
conséquence : le IF est là pour vous permettre ce genre de choses.
Imaginons la procédure suivante :

12 of 19 02/07/2015 10:39
Tutoriel : Procédure stockée file:///C:/Users/Administrator/Downloads/Tutoriel Procédure stocké...

Procédure simple qui compare la variable passée en paramètre à la procédure avec 1. Si les deux sont
égaux, alors le résultat suivant est exécuté, et si ce n'est pas le cas, la partie contenue après le ELSE (sinon)
est quant à elle exécutée.
L'appel des deux CALL nous démontre bien le résultat.

Y a pas moyen de mettre plusieurs IF ?

Il est tout à fait possible de mettre plusieurs conditions, ce qui donne la chose suivante :

Pour chaque condition que vous souhaiterez ajouter, il vous suffira d'ajouter une ligne :

On peut mettre plusieurs requêtes ?

Oui, ce qui peut par exemple donner ceci :

13 of 19 02/07/2015 10:39
Tutoriel : Procédure stockée file:///C:/Users/Administrator/Downloads/Tutoriel Procédure stocké...

CASE
Cette syntaxe, qui diffère du CASE normal, va vous permettre d'effectuer une action si une condition est
vérifiée.
Il existe deux types de syntaxes : la première se rapprochant de l'utilisation du 'SWITCH' dans les langages
de programmation, et l'autre étant équivalente à une succession de 'IF ... ELSEIF ... ELSEIF ... ELSE ...' .

Exemple Syntaxe1 :

Dans ce cas, la variable 'var' est comparée à chaque cas rencontré, et si aucune des valeurs n'est vérifiée
dans les WHEN, alors l'instruction après ELSE sera exécutée.
Exemple Syntaxe2 :

Dans ce cas, la variable 'var' n'est pas évaluée ; au lieu de cela, nous passons d'un bloc de WHEN à l'autre
en comparant si une expression est vraie. Si c'est le cas, nous exécutons alors l'instruction qui la suit, sinon,
si aucune des expressions n'est vérifiée, alors l'instruction du ELSE est effectuée.

Est-il possible de mettre plus d'une instruction dans THEN ?

14 of 19 02/07/2015 10:39
Tutoriel : Procédure stockée file:///C:/Users/Administrator/Downloads/Tutoriel Procédure stocké...
Oui vous n'êtes pas limités à une instruction.

LOOP
C'est une structure de boucle qui répète un bloc d'instructions tant qu'elle ne rencontre pas une instruction
LEAVE pour l'arrêter.
Exemple :

Cette requête est correcte, cependant, ne la testez pas car vous auriez une boucle qui dure très
longtemps (Ctrl + C sous Windows pour arrêter le désastre).

Aucune condition d'arrêt n'a été rencontrée, et une erreur ne sera rencontrée que lorsque la valeur maximale
valide de INT sera rencontrée, soit le chiffre : 2 147 483 647.

Comme pour toutes les instructions de boucle qui seront présentées, il est possible d'arrêter
brusquement la boucle à l'aide d'une instruction du type :

Exemple d'arrêt lorsqu'un label est présent :

Le code s'exécute, et si i vaut 10, alors la boucle est arrêtée grâce au nom du label.

Le label indiqué avant l'instruction de boucle doit être le même que celui qui la termine.

15 of 19 02/07/2015 10:39
Tutoriel : Procédure stockée file:///C:/Users/Administrator/Downloads/Tutoriel Procédure stocké...

REPEAT
Cette instruction de type boucle permet de répéter un bloc d'instructions jusqu'à ce qu'une condition soit
vérifiée.
Exemple :

Une boucle est lancée jusqu'à ce que la valeur de variable locale i soit égale à 10.
Plus court que la version avec LOOP pour un résultat identique. :)

Les labels sont supportés de la même manière qu'avec LOOP et prennent donc la même syntaxe.

WHILE
C'est une structure de type boucle qui répète un bloc d'instructions tant qu'une condition est vraie.
Exemple :

Tant que la variable locale i est inférieure à 10, le bloc d'instructions est exécuté.

Les label sont supportés de la même manière qu'avec LOOP et prennent donc la même syntaxe.

ITERATE
ITERATE ne peut être utilisée qu'à l'intérieur d'une boucle LOOP, REPEAT ou WHILE et signifie : "exécute
encore une fois la boucle".

Et plus clairement ?

Le mieux sera encore des exemples reprenant nos procédures précédentes.

16 of 19 02/07/2015 10:39
Tutoriel : Procédure stockée file:///C:/Users/Administrator/Downloads/Tutoriel Procédure stocké...
Exemple LOOP :

Concrètement la boucle se lance, fait ses instructions, arrive sur la condition qui vérifie que la variable locale i
est inférieure à 10 ; si c'est le cas, la boucle est relancée.
Vous remarquerez en testant la procédure que la phrase n'est affichée que lors de la dernière boucle : ce qui
veut dire que lors des premières boucles, dès qu'on lui dit ITERATE, elle relance tout de suite la boucle
portant le label demandé, sans passer par le code qui est en dessous. Ce comportement est quelque peu
déroutant et source d'erreur ; donc, quand vous utilisez ceci, faites bien attention et testez davantage. :)

Exemple REPEAT :

Si nous exécutions la même chose sans le IF contenant le ITERATE, la boucle s'arrêterait au premier tour ;
pourtant, en mettant cette ligne, on s'aperçoit que la valeur est bien incrémentée jusqu'à 10, on retrouve notre
résultat du LOOP, ce comportement est déroutant : la vigilance est donc de mise lorsque vous utilisez le
ITERATE avec le REPEAT.

Exemple WHILE :

17 of 19 02/07/2015 10:39
Tutoriel : Procédure stockée file:///C:/Users/Administrator/Downloads/Tutoriel Procédure stocké...

Tant que i est inférieur à 10, on exécute le bloc ; remarquez que le message est affiché seulement dans la
dernière boucle.

Exemples
Vous trouverez dans cette partie des exemples de procédures prêtes à l'emploi, ou qui permettent de
répondre à des problèmes spécifiques.

Puissance d'un nombre : X exposant n

La procédure est appelée ainsi :

Lister les Membres d'une table :

18 of 19 02/07/2015 10:39
Tutoriel : Procédure stockée file:///C:/Users/Administrator/Downloads/Tutoriel Procédure stocké...

La procédure est appelée par :

Au final, les procédures stockées représentent un bon moyen d'optimiser les requêtes redondantes, tout en
offrant une structure suffisamment large pour permettre des applications évoluées.

19 of 19 02/07/2015 10:39

Potrebbero piacerti anche