Utiliser des procédures stockées
Utiliser des procédures stockées nécessite de savoir comment les exécuter (exécuter). L'exécution d'une procédure stockée est rencontrée bien plus souvent que sa définition, nous allons donc commencer par l'exécution d'une procédure stockée. Ensuite présente la création et l'utilisation de procédures stockées.
Exécuter une procédure stockée
MySQL appelle l'exécution d'une procédure stockée un appel, donc l'instruction utilisée par MySQL pour exécuter une procédure stockée est APPEL. CALL accepte le nom de la procédure stockée et tous les paramètres qui doivent lui être transmis. Jetez un œil à l'exemple suivant :
Entrée :
call productpricing(@pricelow,@pricehigh,@priceaverage);
Copier après la connexion
Analyse : dans celle-ci, une procédure stockée appelée productpricing est exécutée, qui calcule et renvoie le prix minimum, maximum et moyen. du produit.
Une procédure stockée peut ou non afficher des résultats, comme décrit plus loin.
Création de procédures stockées
Comme indiqué, l'écriture de procédures stockées n'est pas une affaire triviale. Pour vous donner une idée de ce processus, prenons un exemple : une procédure stockée qui renvoie le prix moyen d'un produit. Voici son code :
Entrée :
create procedure productpricing() begin select avg(prod_price) as priceaverage from products;end;
Copier après la connexion
Analyse : Nous introduirons la première et la dernière déclaration plus tard. Cette procédure stockée est nommée productpricing et est définie avec l'instruction CREATE PROCEDURE productpricing(). Si la procédure stockée accepte des paramètres, ils seront énumérés entre (). Cette procédure stockée n'a aucun paramètre, mais le () suivant est toujours requis. Les instructions BEGIN et END sont utilisées pour qualifier le corps de la procédure stockée, qui n'est lui-même qu'une simple instruction SELECT (utilisant la fonction Avg()).
Au fur et à mesure que MySQL traite ce code, il crée une nouvelle procédure stockée product-pricing . Aucune donnée n'est renvoyée car ce code n'appelle pas la procédure stockée ; il est simplement créé pour une utilisation ultérieure.
Délimiteur pour le client de ligne de commande mysql Si vous utilisez l'utilitaire de ligne de commande mysql, vous devez lire attentivement cette description.
Le délimiteur d'instruction MySQL par défaut est ; (comme vous l'avez déjà vu dans les instructions MySQL utilisées jusqu'à présent). L'utilitaire de ligne de commande mysql utilise également ; comme délimiteur d'instruction. Si un utilitaire de ligne de commande devait interpréter les caractères ; dans la procédure stockée elle-même, ils ne deviendraient pas des composants de la procédure stockée, ce qui provoquerait une erreur de syntaxe dans le code SQL de la procédure stockée.
La solution consiste à modifier temporairement le délimiteur d'instruction de l'utilitaire de ligne de commande comme ceci :
delimiter//
create procedure productpricing()
begin
select avg(prod_price) as priceaverage from products;
end //
delimiter;
Copier après la connexion
où DELIMITER // indique à l'utilitaire de ligne de commande d'utiliser // comme nouvelle instruction Quant au délimiteur de fin, vous pouvez voir que END, qui marque la fin de la procédure stockée, est défini comme END// au lieu de END;. De cette façon, le ; à l’intérieur du corps de la procédure stockée reste intact et est correctement transmis au moteur de base de données. Enfin, pour revenir au délimiteur d'instruction d'origine, utilisez DELIMITER ;. N'importe quel caractère peut être utilisé comme délimiteur d'instruction, à l'exception du symbole.
Si vous utilisez l'utilitaire de ligne de commande mysql, gardez cela à l'esprit lorsque vous lisez ce chapitre.
Alors, comment utiliser cette procédure stockée ? Comme indiqué ci-dessous :
Entrée :
call productpricing();
Copier après la connexion
Sortie :
Analyse : CALL productpricing(); traiter et afficher les résultats renvoyés. Étant donné qu'une procédure stockée est en réalité une fonction, le symbole () est requis après le nom de la procédure stockée (même si aucun paramètre n'est transmis).
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!