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 中包含非空值,使用 ...