2017-06-07 1 views
1

Si je crée cette procédure stockée ci-dessous et l'exécute, je récupère les deux lignes de la table alors qu'il ne devrait s'agir que d'une seule requête.La procédure stockée MySQL renvoie plusieurs enregistrements alors qu'une requête simple en renvoie une

CREATE PROCEDURE `getUserName`(IN Guid VARCHAR(36), IN GameID INT(11)) 
    BEGIN 
     SELECT `Name` as UserName, `GUID` as guid 
     FROM playerdata 
     WHERE `GUID` = Guid AND `GameID` = GameID; 
    END 

    CALL getUserName('86fd1007-4a9c-11e7-b2e2-1803733c2d41', 1001); 

retours Voir l'image

Cependant, si je lance simplement comme une requête régulière

SELECT `Name` as UserName, `GUID` as guid 
    FROM playerdata 
    WHERE `GUID` = "86fd1007-4a9c-11e7-b2e2-1803733c2d41" AND `GameID` = 1001; 

retours Voir l'image

Table Data and Query Results

Je suis déconcerté quant au comportement Considérant ... au moins pour moi, ils sont la même chose.

+3

Renommez les paramètres de procédure stockée, par exemple '_Guid' et' _GameID'. Voir [C.1 Restrictions sur les programmes stockés :: Conflits de noms dans les routines stockées] (https://dev.mysql.com/doc/refman/5.7/fr/stored-program-restrictions.html). – wchiquito

+1

\ "GUID \' et Guid sont la même chose. C'est la même chose que 1 = 1. – Strawberry

+0

Eh bien, ça explique ça. Je n'arrête pas d'oublier quand je passe à SQL qui est insensible à la casse sur la plupart des choses. –

Répondre

1
CREATE PROCEDURE `getUserName`(IN IN_Guid VARCHAR(36), IN IN_GameID INT(11)) 
    BEGIN 
     SELECT `Name` as UserName, `GUID` as guid 
     FROM playerdata 
     WHERE `GUID` = IN_Guid AND `GameID` = IN_GameID ; 
    END 

    CALL getUserName('86fd1007-4a9c-11e7-b2e2-1803733c2d41', 1001); 

Essayez code ci-dessus.

Si le paramètre d'entrée ont le même nom que le nom de la colonne, il va enfin évaluer l'équivalent de 1=1 donc il n'y a pas de sens de condition.Means GameID = GameID et 1=1 les deux sont équivalents. Donc, essayez toujours de faire en sorte que le nom des paramètres d'entrée et de sortie diffère du nom de colonne de la table spécifique.

J'ai essayé que ça fonctionne bien.

Espérons que cela vous aidera.

+0

pouvez-vous expliquer y est-ce le travail? –

+0

vous devriez éditer votre question avec ceci +1 –

+1

J'avais mis à jour ma réponse. –