2014-10-06 105 views
0

我是一個MySQL新手,一直在嘗試創建一個存儲過程。下面的代碼返回錯誤Error Code: 1172. Result consisted of more than one row。我究竟做錯了什麼? (我使用MySQL的工作臺)MySQL - 結果由多個行組成

CREATE DEFINER=`root`@`localhost` PROCEDURE `season_private_league_user`(
IN user_id INT, 
OUT league_name VARCHAR(25), 
OUT host_user VARCHAR(30)) 
BEGIN 

    DECLARE userteamid INT; 
    DECLARE var_league_name VARCHAR(25); 
    DECLARE var_host_user VARCHAR(30); 

    # Retrieve user team from user_id 
    SELECT CS_USER_TEAMS_ID INTO userteamid 
    FROM classicseasonmodel_classicseasonuserteam 
    WHERE user_id = user_id; 

    #LEAGUE NAME 
    SELECT classicseasonmodel_classicseasonprivateleague.private_league_name INTO var_league_name 
    FROM classicseasonmodel_classicseasonuserteamprivateleague 
    INNER JOIN classicseasonmodel_classicseasonprivateleague 
    ON classicseasonmodel_classicseasonuserteamprivateleague.private_league_id=classicseasonmodel_classicseasonprivateleague.CS_PRIVATE_LEAGUE_ID 
    WHERE user_team_id = userteamid; 

    #HOST_USER 
    SELECT classicseasonmodel_classicseasonprivateleague.host_user_id INTO var_host_user 
    FROM classicseasonmodel_classicseasonuserteamprivateleague 
    INNER JOIN classicseasonmodel_classicseasonprivateleague 
    ON classicseasonmodel_classicseasonuserteamprivateleague.private_league_id=classicseasonmodel_classicseasonprivateleague.CS_PRIVATE_LEAGUE_ID 
    WHERE user_team_id = userteamid; 

    SET league_name = var_league_name; 
    SET host_user = var_host_user; 

END 

CALL season_private_league_user(2, @league_name, @host_user); SELECT @league_name AS league_name; SELECT @host_user AS host_user;

回答

1

您的列名和參數名是相同的。重命名您的輸入參數並將命令更改爲:

SELECT CS_USER_TEAMS_ID INTO userteamid 
FROM classicseasonmodel_classicseasonuserteam 
WHERE user_id = @user_id; 
1

一說結果存儲在一個變量返回多行,它返回該錯誤的存儲過程,你的SELECT。這樣,您只能將一個值存儲在一個變量中,而不是多個值。

你可以閱讀關於SELECT ... INTO語句here。您可能最感興趣的部分是:

將所選值分配給變量。 變量的數量必須與列數相匹配。查詢應該返回一個 單行。如果查詢不返回行,則會發生錯誤代碼爲 1329的警告(無數據),並且變量值保持不變。如果 查詢返回多行,則會發生錯誤1172(結果包含多行的 )。如果語句可能 檢索多行,則可以使用LIMIT 1將結果集限制爲單行的 。