2017-08-27 6 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 ; 

上記のストアドプロシージャは2つの行を更新します.1つはuser_id = 1、もう1つはuserid0です。理由はわかりません! CALLのGET_USER_PNTSを(1、1、1)ストアドプロシージャは2行を更新します

user_idの0も更新なっている理由を私に知らせてください -

は、これは私がストアドプロシージャを呼び出す方法です。

P.S 1.私はMariaDBを使用しています。 2. UserID 0は、私が手動でテーブルに追加したものです。 praticeには0 user_idはありません。しかし、それでも行は更新されるべきではありません。

+0

実際の例では、 'UPDATE USR_PNT_SUMM SET USD_PNTS = USD_PNTS + PNTS WHERE USER_ID = 1; 'が適切なパラメータをハードコードしていないと思います。 – lad2025

+0

ユーザーID 1の行のみが更新されるようにUSER_IDを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はtrueとして扱われます。

+1

これはすぐに現場にあります。どのように私はこれに気付かなかったのだろうか!しかし、ありがとう。 – user3276247

関連する問題