Maison  >  Article  >  base de données  >  La procédure stockée MySQL renvoie-t-elle plusieurs jeux de résultats ?

La procédure stockée MySQL renvoie-t-elle plusieurs jeux de résultats ?

(*-*)浩
(*-*)浩original
2019-05-18 11:04:169982parcourir

Cet article présentera les résultats lorsque la procédure stockée renvoie plusieurs ensembles de résultats. J'espère qu'il pourra être une référence pour tout le monde.

La procédure stockée MySQL renvoie-t-elle plusieurs jeux de résultats ?

La fonction stockée MySQL ne renvoie qu'une valeur. Pour développer une procédure stockée qui renvoie plusieurs valeurs, vous devez utiliser une procédure stockée avec des paramètres INOUT ou OUT.

Regardons d'abord la structure d'une table de commandes :

mysql> desc orders;
+----------------+-------------+------+-----+---------+-------+
| Field          | Type        | Null | Key | Default | Extra |
+----------------+-------------+------+-----+---------+-------+
| orderNumber    | int(11)     | NO   | PRI | NULL    |       |
| orderDate      | date        | NO   |     | NULL    |       |
| requiredDate   | date        | NO   |     | NULL    |       |
| shippedDate    | date        | YES  |     | NULL    |       |
| status         | varchar(15) | NO   |     | NULL    |       |
| comments       | text        | YES  |     | NULL    |       |
| customerNumber | int(11)     | NO   | MUL | NULL    |       |
+----------------+-------------+------+-----+---------+-------+
7 rows in set

Ensuite, regardons une procédure stockée qui accepte les numéros de clients et les retours expédiés et annulés), le nombre total de commandes résolues et contestées commandes (ensembles de résultats multiples) :

DELIMITER $$
 
CREATE PROCEDURE get_order_by_cust(
 IN cust_no INT,
 OUT shipped INT,
 OUT canceled INT,
 OUT resolved INT,
 OUT disputed INT)
BEGIN
 -- shipped
 SELECT
            count(*) INTO shipped
        FROM
            orders
        WHERE
            customerNumber = cust_no
                AND status = 'Shipped';
 
 -- canceled
 SELECT
            count(*) INTO canceled
        FROM
            orders
        WHERE
            customerNumber = cust_no
                AND status = 'Canceled';
 
 -- resolved
 SELECT
            count(*) INTO resolved
        FROM
            orders
        WHERE
            customerNumber = cust_no
                AND status = 'Resolved';
 
 -- disputed
 SELECT
            count(*) INTO disputed
        FROM
            orders
        WHERE
            customerNumber = cust_no
                AND status = 'Disputed';
 
END

En fait, en plus des paramètres IN, la procédure stockée nécessite également 4 paramètres OUT supplémentaires : expédié, annulé, résolu et contesté. Dans la procédure stockée, utilisez l'instruction select avec la fonction count pour obtenir le total de la commande correspondant en fonction du statut de la commande et affectez-le au paramètre correspondant. Selon le SQL ci-dessus, si nous voulons utiliser la procédure stockée get_order_by_cust, nous pouvons transmettre le numéro de client et quatre variables définies par l'utilisateur pour obtenir la valeur de sortie. Après avoir exécuté la procédure stockée, nous utilisons l'instruction SELECT pour afficher la valeur de la variable :

+----------+-----------+-----------+-----------+
| @shipped | @canceled | @resolved | @disputed |
+----------+-----------+-----------+-----------+
|       22 |         0 |         1 |         1 |
+----------+-----------+-----------+-----------+
1 row in set

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