此儲存過程實現功能為:在目前的級別賬號表account_exts上,通過公升級日誌表level_logs,回退到某乙個時刻賬號的級別狀態,從而達到統計特定某乙個時刻級別情況的目的。
賬號表:account_exts
公升級日誌表:level_logs
級別統計表:level_by_hours
以下是相應的儲存過程**,請參考。
create
procedure
`count_level_status_by_day`(in
`level_date_input`
date)
begin
-- 定義級別日誌表中的變數
declare
levelvar int;
declare
accountvar varchar (255);
declare
gatewayvar varchar (255);
declare
channelvar varchar (255);
-- 定義迴圈結束的標誌
declare
done int default 0;
-- 定義游標迴圈級別日誌表
declare
level_log_cursor cursor for select
account,
channel,
gateway,
min(`level`) - 1
from
level_logs
where
modified > date_add(
level_date_input,
interval
1day
)group
by account,
channel,
gateway;
-- 迴圈結束的條件
declare
continue handler
forsqlstate
'02000'
set done = 1;
-- 建立臨時的當天的賬號級別表
create
table
ifnot
exists level_by_account (
level_date date,
account varchar (255) not
null,
channel varchar (255) not
null,
gateway varchar (255) not
null,
now_level int (11) not
null
);-- 刪除其中的歷史資料
delete
from
level_by_account;
-- 插入臨時表中資料
insert
into level_by_account (
account,
channel,
gateway,
now_level
) select
account,
channel,
gateway,
last_level
from
account_exts;
update level_by_account
set level_date = level_date_input;
open level_log_cursor;
-- 迴圈迴圈處理,後來公升級的賬號的級別,更新為最小的公升級級別-1
repeat
fetch level_log_cursor into accountvar,
channelvar,
gatewayvar,
levelvar;
-- 更新賬號的當時級別
update level_by_account
set now_level = levelvar
where
account = accountvar
and channel = channelvar
and gateway = gatewayvar;
until done
endrepeat
;close level_log_cursor;
-- 刪除統計表中的資料
delete
from
level_by_hours
where
level_date = level_date_input;
-- 插入最新的統計資料
insert
into level_by_hours (
level_date,
gateway,
channel,
level,
amount,
modified
)( select
level_date,
gateway,
channel,
now_level,
count(*),
now()
from
level_by_account
group
by level_date,
gateway,
channel,
now_level
);end
1、呼叫儲存過程的語句:call count_level_status_by_day(『2015-04-02』);
2、帶有out引數的儲存過程:call count_level(@total);
3、刪除儲存過程:drop procedure name;
4、其中也可以使用if邏輯,語法為:if 。。。then 。。。end if;
5、查詢建立儲存過程的語句為:show create procedure count_level_status_by_day;
6、獲得何時,誰建立和修改了儲存過程:show procedure status like 『count_level_status_by_day』;
mysql過程編寫 mysql儲存過程編寫(一)
首先需要知道mysql儲存過程的作用 1 儲存過程能實現較快的執行速度 2 儲存過程能過減少網路流量 3 儲存過程可被作為一種安全機制來充分利用 儲存過程的格式 create procedure 儲存過程名 過程引數 特性引數 begin endeg delimiter create procedu...
MySQL儲存過程編寫
我想把乙個資料匯入另外乙個資料表,所以我用mysql在上面實現儲存過程.發現和sql server還是有區別的.具體寫法如下 drop procedure if exists test proc delimiter create procedure test proc begin 宣告乙個標誌don...
MySQL儲存過程例項
9.3 mysql儲存過程 mysql 5.0以後的版本開始支援儲存過程,儲存過程具有一致性 高效性 安全性和體系結構等特點,本節將通過具體的例項講解php是如何操縱mysql儲存過程的。例項261 儲存過程的建立 這是乙個建立儲存過程的例項 錄影位置 光碟 mingrisoft 09 261 例項...