Les procédures stockées de base de données MySQL
Les procédures stockées de base de données MySQL
-
Objectifs
- Connaitre les procédures stockées de base de données MySQL
-
Qu’est-ce que la procédure stockée MySQL?
- Les procédures stockées sont disponibles depuis la version 5 de MySQL, et permettent d’automatiser des actions, qui peuvent être très complexes.
- Une procédure stockée, aussi appelée stored procedure en anglais, est un concept utilisé en administration de base de données afin d’exécuter un ensemble d’instructions SQL.
- Une telle procédure est stockée au sein du Système de Gestion de Base de Données (SGBD) et peut être appelée à tout moment par son nom afin d’exécuter celle-ci.
- Une procédure stockée (procédure stockée) est un petit algorithme en langage SQL stocké à côté de la base de données et vous permettant d’effectuer des tâches sur ces données.
- La procédure stockée est constituée d’instructions SQL encapsulées dans l’instruction CREATE PROCEDURE. La procédure stockée peut contenir une instruction conditionnelle comme IF ou CASE ou les boucles. La procédure stockée peut également exécuter une autre procédure stockée ou une fonction qui modularise le code.
-
Exemples
- L’exemple ci-dessous est une procédure stockée au sein de MySQL qui permet lire les pays d’un continent rapidement en donnant le nom du contient concerné :
- Pour appeler la procédure, il est possible d’exécuter la requête SQL suivante:
-
Syntaxe simplifiée
- La syntaxe pour créer une procédure dans MySQL est la suivante:
- Exécuter une procédure stockée
- Pour exécuter une procédure stockée, vous utilisez l’ CALLinstruction :
- Dans cette syntaxe, vous spécifiez le nom de la procédure stockée après le mot-clé
CALL
. Si la procédure stockée a des paramètres, vous devez passer des arguments entre parenthèses après le nom de la procédure stockée. -
Utilisation de MySQL DELIMITER pour les procédures stockées
- En règle générale, une procédure stockée contient plusieurs instructions séparées par des points-virgules (;).
- Pour compiler l’ensemble de la procédure stockée en une seule instruction composée, vous devez remplacer temporairement le délimiteur du point-virgule (;) par un autre délimiteur tel que
$$
ou//
. - Dans cette syntaxe
- Tout d’abord, spécifiez le nom de la procédure stockée que vous souhaitez créer après les mots-clés
CREATE PROCEDURE
. - Ensuite, spécifiez une liste de paramètres séparés par des virgules pour la procédure stockée entre parenthèses après le nom de la procédure.
- Troisièmement, écrivez le code entre les blocs
BEGIN
etEND
. L’exemple ci-dessus a juste une déclaration simpleSELECT
. Après le mot-clé END, vous placez le caractère délimiteur pour terminer l’instruction de procédure. -
Pourquoi les procédures stockées ?
- Les procédures stockées sont rapides.
- Le serveur MySQL tire parti de la mise en cache, tout comme les instructions préparées. Le principal gain de vitesse provient de la réduction du trafic réseau.
- Si vous avez une tâche répétitive qui nécessite une vérification, une boucle, plusieurs instructions et aucune interaction de l’utilisateur, effectuez-la avec un seul appel à une procédure stockée sur le serveur.
- Les procédures stockées sont portables.
- Lorsque vous écrivez votre procédure stockée en SQL, vous savez qu’elle s’exécutera sur toutes les plates-formes sur lesquelles MySQL s’exécute, sans vous obliger à installer un package d’environnement d’exécution supplémentaire, ni à définir des autorisations pour l’exécution du programme dans le système d’exploitation, ni à déployer différents packages.
- si vous avez différents types d’ordinateurs. C’est l’avantage d’écrire en SQL plutôt que dans un langage externe comme Java ou C ou PHP.
- Les procédures stockées sont toujours disponibles sous forme de « code source » dans la base de données elle-même.
- Il est logique de lier les données aux processus qui opèrent sur les données.
- Les procédures stockées sont migratoires ! MySQL adhère assez étroitement à la norme SQL:2003. D’autres (DB2, Mimer) adhèrent également.
DELIMITER //
CREATE PROCEDURE country_hos
(IN con CHAR(20))
BEGIN
SELECT Name, HeadOfState
FROM Country
WHERE Continent = con;
END //
DELIMITER ;
CALL country_hos('country_hos');
CREATE PROCEDURE ma_procedure (parameter1 type, parameter2 type, ...)
BEGIN
instruction1;
instruction2;
...
instruction3;
END;
CALL stored_procedure_name(argument_list);