2017-08-27 57 views
1
DELIMITER // 
CREATE OR REPLACE PROCEDURE GET_USER_PNTS(USER_ID INT , PNTS INT, QNT INT) 
    BEGIN 
    DECLARE x INT DEFAULT 1; 
    DECLARE TEMP_GIFT_ID INT; 
    UPDATE USR_PNT_SUMM SET USD_PNTS = USD_PNTS + PNTS WHERE USER_ID = 1; 
    COMMIT; 
    END // 
DELIMITER ; 

上面的存儲過程更新兩行 - 一個用於USER_ID = 1,另一種爲用戶標識0。我不明白爲什麼!存儲過程更新兩行

這是我如何調用存儲過程 - CALL GET_USER_PNTS(1,1,1)

請讓我知道爲什麼USER_ID 0也得到更新。

P.S 1.我正在使用MariaDB。 2. UserID 0是我在表中手動添加的。在實踐中不會有任何0 user_id。但即使如此,該行也不應該被更新。

+0

我想在實際的例子中,你沒有硬編碼'UPDATE USR_PNT_SUMM SET USD_PNTS = USD_PNTS + PNTS WHERE USER_ID = 1;'但是正確的參數。 – lad2025

+0

我將USER_ID設置爲1,以確保只有用戶標識1的行得到更新。但我仍然看到其他行得到更新。 – user3276247

回答

1

請重命名您的參數:

CREATE OR REPLACE PROCEDURE GET_USER_PNTS(L_USER_ID INT , L_PNTS INT, L_QNT INT) 
    BEGIN 
    DECLARE x INT DEFAULT 1; 
    DECLARE TEMP_GIFT_ID INT; 
    UPDATE USR_PNT_SUMM SET USD_PNTS = USD_PNTS + L_PNTS WHERE USER_ID = L_USER_ID; 
    COMMIT; 
    END // 

大概USER_ID = USER_ID被視爲真。

+1

這是正確的。我不知道我怎麼沒有注意到這一點!非常感謝。 – user3276247