web-dev-qa-db-fra.com

Comment MySQL renvoie-t-il un jeu de résultats à partir d'une procédure stockée?

J'essaie de me familiariser avec les procédures stockées à utiliser dans une application Web. Il me semble que quelle que soit la dernière instruction dans une procédure stockée MySQL, c'est ce qui est traité comme l'ensemble de résultats de cette procédure. Malheureusement cependant, il semble qu'il y ait des références dans les documents MySQL qui disent qu'une procédure peut retourner plusieurs jeux de résultats. Comment ce comportement est-il déclenché? Comment puis-je dire au serveur MySQL que je souhaite explicitement qu'un seul jeu de résultats soit renvoyé?

(Par exemple, j'ai une requête qui fait un SELECT et quelques insertions. Je ne veux pas parler des insertions aux clients, mais je veux que le client reçoive le jeu de résultats de SELECT ....)

16
Billy ONeal

Chaque instruction SELECT qui ne s'insère pas dans une table ou une variable produira un jeu de résultats.

Si vous souhaitez que votre procédure stockée renvoie un seul jeu de résultats, assurez-vous que vous n'avez qu'une seule instruction SELECT. Si vous avez d'autres instructions SELECT, assurez-vous qu'elles insèrent des résultats dans une table ou une variable.

MISE À JOUR
Voici des exemples de procédures stockées.

Cette procédure stockée retournerait un jeu de résultats:

DELIMITER ;;
CREATE DEFINER=CURRENT_USER PROCEDURE stored_procedure_name()
BEGIN
    DECLARE local_variable_name INT;

    SELECT column_name FROM table_1 LIMIT 1 INTO local_variable_name;

    SELECT * FROM table_1;
END;;
DELIMITER ;

Cette procédure stockée retournerait deux jeux de résultats:

DELIMITER ;;
CREATE DEFINER=CURRENT_USER PROCEDURE stored_procedure_name()
BEGIN
    DECLARE local_variable_name INT;

    SELECT column_name FROM table_1 LIMIT 1 INTO local_variable_name;

    SELECT * FROM table_1;

    SELECT * FROM table_2;
END;;
DELIMITER ;
17
dabest1