MYSQL中的儲存過程編寫例項

2021-06-29 13:42:39 字數 3207 閱讀 9180

此儲存過程實現功能為:在目前的級別賬號表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 例項...