使用mysql編寫儲存過程的使用方法

2021-10-04 22:53:32 字數 3268 閱讀 3660

1.建立儲存過程

①建立無參儲存過程。

create procedure p_cp()

begin

select * from user;

end;

呼叫無參儲存過程: call p_cp()

在mybatis中呼叫儲存過程:

②建立有參

create procedure p_cp

(in p_unitid varchar(20

), out p_result int

) begin

declare p_bbdw varchar(20

);declare p_lydjbh varchar(40

);end;``

呼叫有參儲存過程: call procedure2(@p_unitid ,@p_result);

在mybatis中呼叫儲存過程: ,#)}

ps:包含兩個引數  in、out

in: 乙個是傳入引數;

out: 乙個是傳出引數;

呼叫此儲存過程 , 必須指定2個變數名(所有 mysql 變數都必須以 @ 開始)

③刪除儲存過程

drop procedure product;

drop procedure if exists getusers;

2.乙個完整的儲存過程

--判斷是否存在改名稱的儲存過程, 如果存在則刪除該儲存過程

drop procedure if exists p_儲存過程名稱;

--建立儲存過程(in: 傳入的引數; out: 返回的引數)

create procedure p_儲存過程名稱(in p_unitid varchar(20

), out p_result int

)--開始

begin

/*為p_bbdw宣告變數*/

declare p_bbdw varchar(20

);declare p_lydjbh varchar(40

);declare p_htbh varchar(40

);declare p_hpbh varchar(40

);declare p_sl numeric(14

,4);

declare has_next int

default1;

/*cursor: 為rowpointer定義游標

open rowpointer : 開啟游標*/

declare rowpointer cursor for

select distinct mx.bbdw, sc.htbh, mx.wlbh,

sum(mx.rksl) as sl

from kc_ccprkd_mx mx, kc_ccprkd rk, sc_scgl sc

where mx.bbdw=rk.bbdw and mx.rkdbh=rk.bh and rk.bbdw=sc.bbdw and rk.lydjbh=sc.scbh

andifnull

(mx.del***,'')

<

>

'1'and

ifnull

(rk.del***,'')

<

>

'1'and

ifnull

(sc.del***,'')

<

>

'1'and rk.shzt=

'1'and rk.djly=

'sczl'

and rk.bbdw=p_unitid and rk.bh=p_ccprkbh

group by mx.bbdw, sc.htbh, mx.wlbh ;

/*如果沒有返回值, 則設定has_next=0*/

declare continue handler for not found set has_next=0;

/*if not exists 即如果不存在,if exists 即如果存在*/

if exists (

select mx.autoid

from kc_ccprkd_mx mx, kc_ccprkd rk, sc_scgl sc

where mx.bbdw=rk.bbdw and mx.rkdbh=rk.bh and rk.bbdw=sc.bbdw and rk.lydjbh=sc.scbh

andifnull

(mx.del***,'')

<

>

'1'and

ifnull

(rk.del***,'')

<

>

'1'and

ifnull

(sc.del***,'')

<

>

'1'and rk.shzt=

'1'and rk.djly=

'sczl'

and rk.bbdw=p_unitid and rk.bh=p_ccprkbh

) then

set p_result=0;

/* 開啟游標 */

open rowpointer;

/*返回乙個字串組成的字串str重複的次數。如果計數小於1,則返回乙個空字串。如果str或count是null,則返回null。*/

repeat

/*提取操作的列資料放到區域性變數中*/

fetch rowpointer into p_bbdw, p_htbh, p_hpbh, p_sl;

if has_next!=

0 then

update ht_ht_cp set rksl=

ifnull

(rksl,0)

+p_sl where htbh=p_htbh and cpbh=p_hpbh and

ifnull

(del***,'')

<

>

'1';

set p_result=p_result+1;

end if

; until has_next=

0 end repeat;

/*關閉游標*/

close rowpointer;

else

set p_result=0;

end if

;end;

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...

儲存過程的編寫

這些是 sql 92 設定語句,使 mssql 遵從 sql 92 規則 當 set ansi nulls 為 on 時 即使 column name 中包含空值,使用 where column name null 的 select 語句仍返回零行。即使 column name 中包含非空值,使用 ...