參考:鏈結
儲存過程(stored procedure)是一種在資料庫中儲存複雜程式,以便外部程式呼叫的一種資料庫物件。儲存過程是為了完成特定功能的sql語句集,經編譯建立並儲存在資料庫中,使用者可通過指定儲存過程的名字並給定引數(需要時)來呼叫執行。儲存過程思想上很簡單,就是資料庫 sql 語言層面的**封裝與重用。
儲存過程語法
create
procedure 名稱(
)begin..
....
...end
-- example
create
procedure test(
)begin
select
*from students;
select
*from teachers;
end;
-- 呼叫
call test(
);
id name
1 zsdf
2 skt
3 ig
create
procedure testiname(
)begin
-- 使用 declare語句宣告乙個變數
declare username varchar(32
)default'';
-- 使用set語句給變數賦值
set username=
'***'
;-- 將users表中id=1的名稱賦值給username
select name into username from users where id=1;
-- 返回變數
select username;
end;
變數的宣告使用declare,一句declare只宣告乙個變數;
變數具有資料型別和長度,與mysql的sql資料型別保持一致;
變數可以通過set來賦值,也可以通過select into的方式賦值(結合表中的資料一起使用);
變數返回使用select語句,例如:select 變數名。
變數作用域說明(這個和全域性變數區域性變數是一致的)
儲存過程中變數是有作用域的,作用範圍在begin和end塊之間,end結束變數的作用範圍即結束。
需要多個塊之間傳值,可以使用全域性變數,即放在所有**塊之前
create
procedure 名稱([in
|out
|inout
] 引數名 引數資料型別 )
begin..
....
...end
傳入引數:型別為in,表示該引數的值必須在呼叫儲存過程事指定,如果不顯示指定為in,那麼預設就是in型別。
in型別引數一般只用於傳入,在呼叫過程中一般不作為修改和返回
create
procedure testin(userid int
)begin
declare username varchar(32
)default'';
select name into username from users where id=userid;
select username;
end;
-- 呼叫
call testin(2)
;
傳出引數:在呼叫儲存過程中,可以改變其值,並可返回;
out是傳出引數,不能用於傳入引數值;
呼叫儲存過程時,out引數也需要指定,但必須是變數,不能是常量;
-- 效果和上例相同
create
procedure testout(
in userid int
,out username varchar(32
))begin
select name into username from users where id=userid;
end;
-- 呼叫方式
set@name=''
;set
@id=2;
call testout(
@id,
@name);
select
@name
;
可變變數inout:呼叫時可傳入值,在呼叫過程中,可修改其值,同時也可返回值
create
procedure testinout(
inout userid int
,inout username varchar(32
))begin
set userid=2;
set username='';
select id,name into userid,username from users where id=userid;
end;
-- 呼叫
set@name=''
;set
@id=2;
call testinout(
@id,
@name);
select
@name
,@id
;
-- 單條件if(
)then..
.else..
.endif;
-- 多重條件if(
)then..
.elseif()
then..
.else..
.end
if;
question:使用者id是偶數則返回name,否則返回id
create
procedure testsif(
in usersid int
)begin
declare usersname varchar(32
)default'';
if(userid%2=
0)then
select name into usersname from users where id=usersid;
select usersname;
else
select usersid;
endif
;end
;-- 呼叫
call testsif(1)
;call testsif(2)
;
question:插入1-10號
-- 基本結構
while
(表示式)do.
....
.end
while
;-- example(插入1-10號)
create
procedure test(
)begin
declare i int
default0;
while
(i<10)
dobegin
select i;
set i=i+1;
insert
into users(id)
values
(i);
end;
endwhile
;end
;
question:插入1-10號
-- 基本結構
repeat..
.until...
endrepeat
;-- example(插入1-10號)
create
procedure test(
)begin
declare i int
default0;
repeat
begin
select i;
set i=i+1;
insert
into users(id)
values
(i);
end;
until i>=
10-- 如果i>=10,則跳出迴圈
endrepeat
;end
;
注意:until後面沒有 「;」
question:將users中的名字改變
-- 基本語法
case..
.when..
.then..
..when..
..then..
..else..
.end
case
;-- 例子
create
procedure testcase(
in usersid int
)begin
case
when usersid=
1then
update users set name=
'bob'
where id=usersid;
when usersid=
2then
update users set name=
'num'
where id=usersid;
else
update users set name=
'sos'
where id=usersid;
endcase
;end
;-- 呼叫
call testcase(1)
;call testcase(2)
;call testcase(3)
;
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語句加上控制語句的集合,靈活性高 在伺服器端儲存,客戶端呼叫時,降低網路負載 可多次重複被呼叫,可隨時修改,不影響客戶端呼叫...