1.實戰案例一
1.1 背景
有teacher表,建表語句如下:
create
table teacher
(id int(4
)primary
keynot
null
unique
auto_increment
,num int(10
)not
null
unique
,name varchar(20
)not
null
,*** varchar(4
)not
null
,birthday datetime
,address varchar(50
));
其插入資料的值如下:
insert
into teacher values(1
,1001
,'spark'
,'m'
,'1984-11-08'
,'上海長寧'),
(2,1002
,'hadoop'
,'w'
,'1994-11-28'
,'北京昌平'),
(3,1003
,'hive'
,'m'
,'1978-12-08'
,'北京海淀'),
(4,1004
,'hbase'
,'w'
,'1990-01-08'
,'上海靜安'
);
1.2有如下需求
建立儲存過程teacher_info
。要求:
teacher_info有三個引數。輸入引數為teacher_id
和type
,輸出引數為info
。儲存過程的作用是根據編號teacher_id
來查詢teacher
表中的記錄。如果type
為1,將姓名那麼傳給輸出引數info;如果type的值為2,將年齡傳給輸出引數info;如果type值為其它值,則返回字串error。
儲存過程如下:
delimiter
//create
procedure teacher_info(
in teacher_id int,in
type
int,
out info varchar(20
))begin
case
type
when
1then
select name into info from teacher where id = teacher_id;
when
2then
select
year
(now()
)-year
(birthday)
into info from teacher where id = teacher_id;
else
select
'error'
into info;
endcase
;end
//delimiter
;show
create
procedure
;
在mysql 命令列執行如下命令:
mysql>
delimiter
//mysql>
create
procedure teacher_info(
in teacher_id int,in
type
int,
out info varchar(20
))->
begin
->
case
type
->
when
1then
->
select name into info from teacher where id = teacher_id;
->
when
2then
->
select
year
(now()
)-year
(birthday)
into info from teacher where id = teacher_id;
->
else
->
select
'error'
into info;
->
endcase;-
>
end//
query ok,
0rows affected (
0.07 sec)
mysql>
delimiter
;
mysql>
call teacher_info(2,
1,@info);
query ok,
1row affected (
0.04 sec)
mysql>
select
@info;+
--------+
|@info|+
--------+
| hadoop |
+--------+
1row
inset
(0.00 sec)
2.實戰案例二
2.1 **
drop
procedure
ifexists
text
;delimiter
//
create
procedure
text
(out rtn int
)begin
declare loginid int
default0;
#mysql中的declare語句是在復合語句中宣告變數的指令
set rtn=1;
if loginid =
3then
set rtn=2;
elseif loginid =
0then
set rtn=3;
else
set rtn=4;
endif
;end
//delimiter
;
2.2 執行結果mysql>
call
text
(@rtn);
#呼叫儲存過程
query ok,
0rows affected (
0.00 sec)
mysql>
select
@rtn
;#選擇結果
+------+
|@rtn|+
------+|3
|+------+
1row
inset
(0.01 sec)
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語句加上控制語句的集合,靈活性高 在伺服器端儲存,客戶端呼叫時,降低網路負載 可多次重複被呼叫,可隨時修改,不影響客戶端呼叫...