Exemple : reprenons la procédure précédente, mais en utilisant un bloc d'instructions.
Code : SQL
CREATE PROCEDURE afficher_races_bloc() -- pas de paramètres dans les
parenthèses
BEGIN
SELECT id, nom, espece_id, prix FROM Race;
END;
Malheureusement…
Code : Console
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that correspon
Que s'est-il passé ? La syntaxe semble correcte…
Les mots-clés sont bons, il n'y a pas de paramètres mais on a bien mis les parenthèses, BEGIN et END sont tous les deux
présents. Tout cela est correct, et pourtant, nous avons visiblement omis un détail.
Peut-être aurez-vous compris que le problème se situe au niveau du caractère ; : en effet, un ; termine une instruction SQL. Or, on
a mis un ; à la suite de SELECT * FROM Race;. Cela semble logique, mais pose problème puisque c'est le premier ; rencontré
par l'instruction CREATE PROCEDURE, qui naturellement pense devoir s'arrêter là. Ceci déclenche une erreur puisqu'en réalité,
l'instruction CREATE PROCEDURE n'est pas terminée : le bloc d'instructions n'est pas complet !
Comment faire pour écrire des instructions à l'intérieur d'une instruction alors ?
Il suffit de changer le délimiteur !
Délimiteur
Ce qu'on appelle délimiteur, c'est tout simplement (par défaut), le caractère ;. C'est-à-dire le caractère qui permet de délimiter les
instructions.
Or, il est tout à fait possible de définir le délimiteur manuellement, de manière à ce que ; ne signifie plus qu'une instruction se
termine. Auquel cas le caractère ; pourra être utilisé à l'intérieur d'une instruction, et donc pourra être utilisé dans le corps d'une
procédure stockée.
Pour changer le délimiteur, il suffit d'utiliser cette commande :
Code : SQL
DELIMITER |
À partir de maintenant, vous devrez utiliser le caractère | pour signaler la fin d'une instruction. ; ne sera plus compris comme tel
par votre session.
Code : SQL
SELECT 'test'|
Partie 5 : Sécuriser et automatiser ses actions
266/414
www.openclassrooms.com
Précédent

- 266/413

Suivant