Les procédures stockées MySQL sont un ensemble d'instructions SQL prédéfinies qui peuvent être appelées et exécutées en cas de besoin. Les procédures stockées peuvent rendre le code réutilisable et améliorer les performances de la base de données, tout en améliorant la sécurité du développement.
Dans MySQL, les procédures stockées peuvent renvoyer des ensembles de résultats. Dans de nombreux cas, l’utilisation de procédures stockées pour renvoyer des jeux de résultats peut rendre le code plus concis et plus clair, et peut également améliorer les performances des requêtes. Cet article explique comment renvoyer un jeu de résultats dans une procédure stockée MySQL.
Créer une procédure stockée avec un ensemble de résultats
Avant d'utiliser une procédure stockée pour renvoyer un ensemble de résultats, nous devons comprendre comment créer une procédure stockée avec un ensemble de résultats. Voici un exemple de création d'une procédure stockée simple avec un jeu de résultats :
CREATE PROCEDURE get_all_users() BEGIN SELECT * FROM users; END
Dans l'exemple ci-dessus, nous avons créé une procédure stockée appelée get_all_users()
. Lorsque la procédure stockée get_all_users()
est appelée, elle renverra toutes les lignes de la table de données users
. get_all_users()
的存储过程。当调用 get_all_users()
存储过程时,它将会返回 users
数据表中的所有数据行。
注意,在存储过程中返回结果集之前,我们需要先定义结果集,MySQL 中定义结果集有两种方法:
SELECT
语句返回结果集下面将分别介绍这两种方法。
方法一:定义输出参数并返回结果集
在存储过程中定义输出参数,可以使用 OUT
和 INOUT
修饰符。使用 OUT
修饰符定义的参数表示该参数比存储过程执行时的输入参数更多了一个作用,它额外将被用于存储存储过程的结果集。
在下面的示例中,我们使用 OUT
修饰符定义一个名称为 results
的参数:
CREATE PROCEDURE get_all_users_2(OUT results VARCHAR(255)) BEGIN SELECT * FROM users; INTO results; END
在上面的示例中,我们使用 SELECT INTO
语句将查询结果保存到 results
参数中。
调用如下:
CALL get_all_users_2(@results); SELECT @results;
在上面的示例中,我们首先调用存储过程 get_all_users_2()
,并将结果存储在 @results
变量中。 然后,我们在 SELECT
语句中访问了 @results
变量,从而获取了存储过程返回的结果集。
方法二:使用 SELECT
语句返回结果集
另一种使用存储过程返回结果集的方法是,使用 SELECT
语句来返回结果集。这种方法特别适用于当我们需要返回多个结果集时。
下面的示例中,我们定义了一个带有两个 SELECT
语句的存储过程:
CREATE PROCEDURE get_all_users_3() BEGIN SELECT * FROM users WHERE age > 18; SELECT * FROM users WHERE age <= 18; END
在上面的示例中,我们使用两个 SELECT
语句,来分别返回 users
表中所有年龄大于 18 岁和小于等于 18 岁的数据行。
在调用这个存储过程后,我们可以通过多次调用 mysql_store_result()
和 mysql_fetch_row()
函数来获取每个结果集的行数据。
mysql_query("CALL get_all_users_3()"); MYSQL_RES *res = mysql_store_result(&mysql); MYSQL_ROW row; while ((row = mysql_fetch_row(res))) { printf("%s %d\n", row[1], stoi(row[2])); } mysql_next_result(&mysql); res = mysql_store_result(&mysql); while ((row = mysql_fetch_row(res))) { printf("%s %d\n", row[1], stoi(row[2])); }
上面的代码展示了如何通过在 mysql_query()
函数中调用存储过程来获取结果集,以及如何使用 mysql_store_result()
函数和 mysql_fetch_row()
函数来获取和处理我们的结果集数据。
结论
在MySQL中,存储过程可以返回结果集。我们可以通过定义输出参数来存储存储过程的结果集,也可以直接使用 SELECT
SELECT
pour renvoyer l'ensemble de résultatsOUT
et INOUT
. Les paramètres définis à l'aide du modificateur OUT
indiquent que le paramètre a un rôle de plus que les paramètres d'entrée lorsque la procédure stockée est exécutée. Il sera en outre utilisé pour stocker l'ensemble de résultats de la procédure stockée. 🎜🎜Dans l'exemple ci-dessous, nous utilisons le modificateur OUT
pour définir un paramètre nommé results
: 🎜rrreee🎜Dans l'exemple ci-dessus, nous utilisons SELECT Le INTO enregistre les résultats de la requête dans le paramètre <code>results
. 🎜🎜L'appel est le suivant : 🎜rrreee🎜Dans l'exemple ci-dessus, nous appelons d'abord la procédure stockée get_all_users_2()
et stockons les résultats dans la variable @results
. Nous accédons ensuite à la variable @results
dans l'instruction SELECT
pour obtenir le jeu de résultats renvoyé par la procédure stockée. 🎜🎜Méthode 2 : utilisez l'instruction SELECT
pour renvoyer un ensemble de résultats🎜🎜Une autre façon d'utiliser une procédure stockée pour renvoyer un ensemble de résultats consiste à utiliser l'instruction SELECT
pour renvoyer un ensemble de résultats. Cette approche est particulièrement utile lorsque nous devons renvoyer plusieurs ensembles de résultats. 🎜🎜Dans l'exemple ci-dessous, nous définissons une procédure stockée avec deux instructions SELECT
: 🎜rrreee🎜Dans l'exemple ci-dessus, nous utilisons deux instructions SELECT
pour renvoyer toutes les lignes de données. dans la table utilisateurs
dont l'âge est supérieur à 18 ans et inférieur ou égal à 18 ans. 🎜🎜Après avoir appelé cette procédure stockée, nous pouvons obtenir les données de ligne de chaque ensemble de résultats en appelant plusieurs fois les fonctions mysql_store_result()
et mysql_fetch_row()
. 🎜rrreee🎜Le code ci-dessus montre comment obtenir le jeu de résultats en appelant la procédure stockée dans la fonction mysql_query()
, et comment utiliser la fonction mysql_store_result()
avec mysql_fetch_row () pour obtenir et traiter nos données d'ensemble de résultats. 🎜🎜Conclusion🎜🎜Dans MySQL, les procédures stockées peuvent renvoyer des ensembles de résultats. Nous pouvons stocker le jeu de résultats de la procédure stockée en définissant les paramètres de sortie, ou nous pouvons utiliser directement l'instruction SELECT
pour renvoyer le jeu de résultats dans la procédure stockée. Quoi qu’il en soit, les performances des requêtes et la clarté du code sont meilleures. 🎜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!