2017-06-07 18 views
1

このストアドプロシージャを作成して実行すると、クエリが1つのクエリになるはずです。MySQLストアドプロシージャは複数のレコードを返しますが、ストレートクエリは1つ返します

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); 

私はちょうど通常のクエリとして

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

戻り、それを実行すると、戻り値は、しかし、画像

を参照してください私は行動へと困惑していますイメージ

Table Data and Query Results

を参照してください。考えてみると...少なくとも私にとっては同じことです。

+3

ストアドプロシージャのパラメータの名前を変更します(例: '_Guid'および' _GameID')。 [C.1ストアド・プログラムの制限事項:ストアド・ルーチン内の名前の競合](https://dev.mysql.com/doc/refman/5.7/en/stored-program-restrictions.html)を参照してください。 – wchiquito

+1

\ GUID \とGUIDは同じものです。 1 = 1と同じです。 – Strawberry

+0

さて、それについて説明します。大文字小文字を区別しないSQLに切り替えると、私は忘れてしまいます。 –

答えて

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); 

上記のコードを試してください。

入力パラメータが列名と同じ名前の場合、最終的には1=1に相当すると評価されるため、条件の意味はありません。GameID = GameID1=1はどちらも同等です。 したがって、常に入力と出力のパラメータ名を特定のテーブルの列名と異ならせるようにしてください。

私はうまくいきました。

希望すると、これが役立ちます。

+0

あなたはそれが働いていることを説明できますか? –

+0

あなたはこの+1で質問を編集する必要があります –

+1

私は自分の答えを更新しました。 –

関連する問題