目錄:
一.什么是存儲(chǔ)過(guò)程
二.六種存儲(chǔ)過(guò)程
-
1.帶有輸入?yún)?shù)的存儲(chǔ)過(guò)程
-
2.帶有輸出參數(shù)的存儲(chǔ)過(guò)程
-
3.帶有輸入輸出參數(shù)的存儲(chǔ)過(guò)程
-
4.帶有條件判斷的存儲(chǔ)過(guò)程
-
5.帶有循環(huán)過(guò)程的存儲(chǔ)過(guò)程
-
6.使用查詢的結(jié)果作為返回值
一.什么是存儲(chǔ)過(guò)程
存儲(chǔ)過(guò)程,帶有邏輯的sql語(yǔ)句卤妒。(有條件判斷良哲,可以有循環(huán)控制語(yǔ)句(if while)
特點(diǎn):
1.執(zhí)行效率快-存儲(chǔ)過(guò)程是在數(shù)據(jù)庫(kù)服務(wù)器端執(zhí)行捐凭。
2.移植性差-不同數(shù)據(jù)的存儲(chǔ)過(guò)程是不可以移植
語(yǔ)法:
delimiter $
--聲明存儲(chǔ)過(guò)程
create procedure 名稱
--存儲(chǔ)過(guò)程名稱(參數(shù)列表)
begin
--開(kāi)始
寫(xiě)sql語(yǔ)句;
-- 多個(gè)或一個(gè)sql語(yǔ)句
end $
--結(jié)束 結(jié)束符
執(zhí)行存儲(chǔ)過(guò)程
call 名稱();
-- call 存儲(chǔ)過(guò)程名稱([參數(shù)])
參數(shù):
in:表示輸入?yún)?shù)涨薪,可以攜帶數(shù)據(jù)帶存儲(chǔ)過(guò)程
out:表示輸出參數(shù),可以從存儲(chǔ)過(guò)程中返回結(jié)果
inout:表示輸入輸出參數(shù)潜支,既可以輸入功能蒸矛,也可以輸出功能。
二.六種存儲(chǔ)過(guò)程
1.帶有輸入?yún)?shù)的存儲(chǔ)過(guò)程
--創(chuàng)建存儲(chǔ)過(guò)程
delimiter $
create procedure pro_findbyid(in eid int)
begin
select * from employee where id = eid;
end $
--執(zhí)行
call eurasia_echarts.pro_findbyid(1);
2.帶有輸出參數(shù)的存儲(chǔ)過(guò)程
如何接收返回參數(shù)的值
全局/內(nèi)置變量:
mysql數(shù)據(jù)庫(kù)內(nèi)置的變量闽颇,查看內(nèi)置變量命令show variables
mysql服務(wù)器接受數(shù)據(jù)的編碼:character_set_client
mysql服務(wù)器輸出數(shù)據(jù)的編碼:character_set_results
查看某個(gè)局部變量:select @@變量名
修改某個(gè)全局變量:set 變量名=新值
會(huì)話變量:
只存在于當(dāng)前客戶端與數(shù)據(jù)庫(kù)服務(wù)器端一次連接當(dāng)中盾戴。如果連接斷開(kāi),那么會(huì)話變量全部丟失
定義會(huì)話:set @變量=值
查看會(huì)話:select @變量
局部變量
在存儲(chǔ)過(guò)程中使用的變量就叫局部變量兵多。只要存儲(chǔ)過(guò)程執(zhí)行完畢尖啡,局部變量就丟失。
--創(chuàng)建存儲(chǔ)過(guò)程
delimiter $
create procedure pro_out(out str varchar(20))
begin
set str ='輸出我';
end $
--執(zhí)行
set @str = '0';--(會(huì)話變量)
call eurasia_echarts.pro_out(@str);
select @str;
3.帶有輸入輸出參數(shù)的存儲(chǔ)過(guò)程
--創(chuàng)建存儲(chǔ)過(guò)程
delimiter $
create procedure pro_in_out(inout m int)
begin
select m;
set m=500;
end $
--給m賦值為10
set @m=10;
--執(zhí)行語(yǔ)句:結(jié)果為10
call eurasia_echarts.pro_in_out(@m);
--執(zhí)行完語(yǔ)句m 的值為500
select @m;
4.帶有條件判斷的存儲(chǔ)過(guò)程
delimiter $
delimiter $
create procedure pro_testif(in num int,out str varchar(20))
begin
if num=1 then
set str='星期一';
elseif num=2 then
set str='星期二';
elseif num=3 then
set str='星期三';
elseif num=4 then
set str='星期四';
else
set str='輸入錯(cuò)誤';
end if;
end $
call eurasia_echarts.pro_testif(2,@str);
select @str;
5.帶有循環(huán)過(guò)程的存儲(chǔ)過(guò)程
delimiter $
create procedure pro_testwhile(in num int,out sum int)
begin
declare i int default 1;-- 定義變量
declare vsum int default 0;
while i<=num do
set vsum = vsum+i;
set i = i+1;
end while;
set sum = vsum;
end $
call eurasia_echarts.pro_testwhile(50,@sum);
select @sum;
6.使用查詢的結(jié)果作為返回值
select * from employee;
delimiter $
create procedure pro_findemployee(in eid int,out vname varchar(20))
begin
select employee.name into vname from employee where eid=id;
end $
call eurasia_echarts.pro_findemployee(1,@name);
select @name;