Maison  >  Article  >  base de données  >  Comment renvoyer un jeu de résultats dans une procédure stockée MySQL

Comment renvoyer un jeu de résultats dans une procédure stockée MySQL

PHPz
PHPzoriginal
2023-04-21 11:20:003199parcourir

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 中定义结果集有两种方法:

  1. 定义输出参数并返回结果集
  2. 使用 SELECT 语句返回结果集

下面将分别介绍这两种方法。

方法一:定义输出参数并返回结果集

在存储过程中定义输出参数,可以使用 OUTINOUT 修饰符。使用 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

Notez qu'avant de renvoyer l'ensemble de résultats dans la procédure stockée, nous devons d'abord définir l'ensemble de résultats. Il existe deux façons de définir l'ensemble de résultats dans MySQL : 🎜
  1. Définir les paramètres de sortie et renvoyer l'ensemble de résultats.
  2. Utilisez l'instruction SELECT pour renvoyer l'ensemble de résultats
🎜Ces deux méthodes seront présentées ci-dessous. 🎜🎜Méthode 1 : définir les paramètres de sortie et renvoyer l'ensemble de résultats🎜🎜Pour définir les paramètres de sortie dans la procédure stockée, vous pouvez utiliser les modificateurs OUT 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn