MySQL Procédure Stockée qui retourne plusieurs jeux d'enregistrements

J'ai créé certaines procédures stockées dans ma base de données (MySQL) comme suit.

Procédure Stockée 1

CREATE PROCEDURE sp_Name1(
    param1,
    param2,
    ...... 
)
BEGIN
   .....
   some code
   IF cond THEN 
       call sp_Name2  //Calling 2nd procedure from here.

       Update SomeTable .....

       SELECT '1' As Result;
   END IF
END

Procédure Stockée 2

CREATE PROCEDURE sp_Name2(
    param1,
    param2,
    ...... 
)
BEGIN
   .....
   some code
   IF cond THEN 
       SELECT '2' As Result;

       SELECT '3' As Result;
   END IF
END

Maintenant, je vais appeler ma première procédure stockée comme suit:

Call sp_Name1(param1, param2, ... );

Ici, je reçois 4 ensembles de résultats dans MySQL Workbench. 2 résultats de sp_Name2, 3ème pour l'instruction de mise à jour dans sp_Name1 et 4 de l'instruction select, également dans sp_Name1. Ici, je suis à la recherche du dernier jeu de résultats. Parfois, le résultat de la séquence s'affiche dans l'ordre attendu, ce qui signifie que les résultats peuvent venir comme Résultat de 1, le Résultat 2, 4, Résultat 3 (Dans ce cas, je ne peux pas juger qui est le résultat d'ensemble est utile pour moi, parce que le dernier résultat a peut-être changé).

Comment puis-je supprimer les ensembles de résultats?

EDIT :
J'ai de cas d'utilisation pour votre meilleure compréhension.

CREATE PROCEDURE sp_LoginUser( IN Username  varchar(50) , IN password varchar(50) )
BEGIN
    IF EXISTS( SELECT 1 FROM Users where name = UserName and Pwd = password)
       SET userid = 0;
       SET loginid = 0;
       SELECT userid INTO userid
       FROM users
       WHERE name = UserName and Pwd = password;
       IF userid > 0 THEN
           CALL sp_Login(userid);
           SET loginid = LAST_INSERT_ID();         
       END IF;
       //only this result i am expecting.
       IF loginid > 0 THEN
           SELECT userid as userid, loginid AS loginid;
       ELSE
           SELECT 0 userid, 0 loginid;
       END IF;
    END IF;
END

CREATE PROCEDURE sp_Login( IN Userid int )
BEGIN
    INSERT Logins ( userid, datetime )
    VALUES ( Userid, now() );

    SELECT LAST_INSERT_ID() AS loginid;
END

Donc, Maintenant, quand mon utilisateur de demander le login et entrer son nom d'utilisateur avec mot de passe sur ma page de connexion, puis j'ai appeler sp_LoginUser() sur mon serveur. Dans de nombreux cas, j'ai appeler sp_Login() séparément.

Dans le cas ci-dessus, je peux définir un paramètre (par exemple. loginid) INOUT dans sp_Login procédure (), attribuer LAST_INSERT_ID (), les supprimer instruction SELECT et récupérer en sp_LoginUser().
Mais quand j'ai besoin d'appeler sp_Login() séparément, je dois avoir à déclarer une variable dans mon codage pour récupérer la valeur.

Pouvez-vous s'il vous plaît poster des exemples de code qui nous avons pu l'exécuter, afin de reproduire le problème que vous êtes confrontés? Le code que vous avez posté est complètement ambigu.

OriginalL'auteur Manish Sapkal | 2013-12-17