-- 建立清除過期積分儲存過程
delimiter //
drop procedure if exists reporturl //
create procedure reporturl()
begin -- 定義變數
declare s int default 0;
declare sum_integral varchar(255);
declare integral_old varchar(255);
declare integral_now varchar(255);
declare opid varchar(256);
-- 定義游標,並將sql結果集賦值到游標中
declare report cursor for
-- 查詢過期積分(過期日期獲取總積分-使用者消耗總積分)
-- 宣告當游標遍歷完後將標誌變數置成某個值
declare continue handler for not found set s=1;
drop table if exists tmp_table;-- 刪除臨時表
truncate table t_customer_log;
-- 建立臨時表
create temporary table tmp_table (
integral_now varchar(50) not null, -- 清除過期積分後的使用者積分
integral_old varchar(50) not null, -- 未清除之前的使用者積分
openid_sign varchar(50) not null -- 使用者 openid
);-- 開啟游標
open report;
-- 將游標中的值賦值給變數,注意:變數名不要和返回的列名同名,變數順序要和sql結果列的順序一致
fetch report into sum_integral,opid;
-- 當s不等於1,也就是未遍歷完時,會一直迴圈
while s<>1 do
-- 執行業務邏輯
select my_integral into integral_old from t_customer where openid=opid;
-- 當使用者有效積分小於0,則使有效積分等於0
if sum_integral<0
then
set sum_integral=0;
end if;
update t_customer set my_integral=sum_integral where openid=opid;
select my_integral into integral_now from t_customer where openid=opid;
-- 資料插入臨時表
insert into t_customer_log (integral_now,integral_old,openid,insert_date) values(integral_now, integral_old,opid,now());
-- 將游標中的值再賦值給變數,供下次迴圈使用
fetch report into sum_integral,opid;
-- 當s等於1時表明遍歷以完成,退出迴圈
end while;
-- 關閉游標
close report;
select*from t_customer_log;-- 查詢操作使用者表日誌表
end//
delimiter;
-- 呼叫清除過期積分儲存過程(函式)
-- call reporturl()
-- 還原使用者積分
-- update t_customer t1 left join t_customer_log t2 on t1.openid=t2.openid set t1.my_integral= t2.integral_old where t1.is_del=0
mysql儲存過程 MySQL儲存過程
在本節中,您將逐步學習如何在mysql中編寫和開發儲存過程。首先,我們向您介紹儲存過程的概念,並討論何時使用它。然後,展示如何使用過程 的基本元素,如建立儲存過程的語句,if else,case,loop,儲存過程的引數。下面每個教程都包含了易於理解的示例和詳細的說明。如果您瀏覽並學習所有教程,您可...
mysql 儲存過程 mysql 儲存過程
建立 為建立儲存過程的結束標誌,使用delimiter 可更改標誌 格式create procedure begin sqlend create procedure myprocedure in param integer begin select from tb role where tb rol...
mysql 儲存過程 MySQL儲存過程
目錄 儲存過程 簡介是一組為了完成特定功能的sql語句集合 比傳統sql速度更快 執行效率更高 儲存過程的優點 執行一次後,會將生成的二進位制 駐留緩衝區,提高執行效率 sql語句加上控制語句的集合,靈活性高 在伺服器端儲存,客戶端呼叫時,降低網路負載 可多次重複被呼叫,可隨時修改,不影響客戶端呼叫...