2017-08-27 54 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