1、需求,手動給會員新增京幣,並且添加分配日誌,返回修改是否成功 CREATE DEFINER=`jszapi`@`%` PROCEDURE `p_allot_user_coin`(IN `_member_id` int,IN `_coin` int,OUT `_res` tinyint) BEGI ...
1、需求,手動給會員新增京幣,並且添加分配日誌,返回修改是否成功
CREATE DEFINER=`jszapi`@`%` PROCEDURE `p_allot_user_coin`(IN `_member_id` int,IN `_coin` int,OUT `_res` tinyint) BEGIN /* 用途:給會員手動分配京幣 作者:Mo 創建時間:2019-12-16 參數: _member_id : 會員id _coin : 分配京幣數量 _res : 執行結果,1表示成功,0表示失敗 */ DECLARE err INT DEFAULT 0; #是否有sql錯誤 DECLARE timestampTmp int;#當前的時間戳 DECLARE memberSPIDCount INT DEFAULT 0;#會員id對應會員數(用於驗證傳入會員id是否有誤) DECLARE memberTableUpdateCount INT DEFAULT 0;#更新t_members表影響的行數 DECLARE allotTableInsertId INT DEFAULT 0; #插入t_coin_log表的自增id DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET err=1;#判斷是否有SQL錯誤,全局 #開啟事務 START TRANSACTION; #賦值timestampTmp set timestampTmp=unix_timestamp(); #判斷傳入會員id是否有誤 SELECT COUNT(1) INTO memberSPIDCount FROM t_members WHERE id = _member_id; IF memberSPIDCount = 0 THEN SET _res = 0; ELSE #更新 UPDATE t_members SET jing_coin = jing_coin + _coin WHERE id = _member_id; #獲取更新數 SELECT ROW_COUNT() INTO memberTableUpdateCount; IF memberTableUpdateCount = 0 THEN SET err = 1; END IF; #添加分配日誌 INSERT INTO t_coin_log(`member_id`,`coin`,`type`,`describe`,`create_time`) VALUES(_member_id,_coin,3,'公司分配',timestampTmp); #獲取插入的自增ID SELECT @@IDENTITY INTO allotTableInsertId; IF allotTableInsertId = 0 THEN SET err = 1; END IF; #判斷事務是否提交 IF err = 1 THEN SET _res = 0; ROLLBACK;#回滾事務 ELSE SET _res = 1; COMMIT;#提交事務 END IF; END IF; END
2、查詢,存儲過程的調用:傳入參數(IN)直接寫需要傳入的參數,傳出參數(OUT)需要補全格式為 @變數名,如調用上述過程
#CALL 過程名(傳入參數1,傳入參數2,@傳出變數),res名稱自己取 CALL p_allot_user_coin(3,100,@res);
3、結果,輸出結果 返回定義的修改狀態_res值