Mysql學習筆記(6)-存儲過程

目錄:
一.什么是存儲過程
二.六種存儲過程
  • 1.帶有輸入?yún)?shù)的存儲過程
  • 2.帶有輸出參數(shù)的存儲過程
  • 3.帶有輸入輸出參數(shù)的存儲過程
  • 4.帶有條件判斷的存儲過程
  • 5.帶有循環(huán)過程的存儲過程
  • 6.使用查詢的結(jié)果作為返回值

一.什么是存儲過程

存儲過程,帶有邏輯的sql語句。(有條件判斷,可以有循環(huán)控制語句(if while)

特點:

1.執(zhí)行效率快-存儲過程是在數(shù)據(jù)庫服務器端執(zhí)行。
2.移植性差-不同數(shù)據(jù)的存儲過程是不可以移植

語法:

delimiter $ --聲明存儲過程
create procedure 名稱 --存儲過程名稱(參數(shù)列表)
begin --開始
寫sql語句; -- 多個或一個sql語句
end $ --結(jié)束 結(jié)束符

執(zhí)行存儲過程

call 名稱(); -- call 存儲過程名稱([參數(shù)])

參數(shù):

in:表示輸入?yún)?shù),可以攜帶數(shù)據(jù)帶存儲過程
out:表示輸出參數(shù),可以從存儲過程中返回結(jié)果
inout:表示輸入輸出參數(shù),既可以輸入功能,也可以輸出功能。

二.六種存儲過程

1.帶有輸入?yún)?shù)的存儲過程

--創(chuàng)建存儲過程
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ù)的存儲過程

如何接收返回參數(shù)的值
全局/內(nèi)置變量:

mysql數(shù)據(jù)庫內(nèi)置的變量,查看內(nèi)置變量命令show variables
mysql服務器接受數(shù)據(jù)的編碼:character_set_client
mysql服務器輸出數(shù)據(jù)的編碼:character_set_results
查看某個局部變量:select @@變量名
修改某個全局變量:set 變量名=新值

會話變量:

只存在于當前客戶端與數(shù)據(jù)庫服務器端一次連接當中。如果連接斷開,那么會話變量全部丟失
定義會話:set @變量=值
查看會話:select @變量

局部變量

在存儲過程中使用的變量就叫局部變量。只要存儲過程執(zhí)行完畢,局部變量就丟失。

--創(chuàng)建存儲過程
delimiter $ 
create procedure pro_out(out str varchar(20))
begin
    set str ='輸出我';
end $
--執(zhí)行
set @str = '0';--(會話變量)
call eurasia_echarts.pro_out(@str);
select @str;

3.帶有輸入輸出參數(shù)的存儲過程

--創(chuàng)建存儲過程
delimiter $ 
create procedure pro_in_out(inout  m int)
begin
    select m;
    set m=500;
end $
--給m賦值為10
set @m=10;


--執(zhí)行語句:結(jié)果為10
call eurasia_echarts.pro_in_out(@m);
--執(zhí)行完語句m 的值為500
select @m;
image.png

4.帶有條件判斷的存儲過程

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='輸入錯誤';
     end if;
end $

call eurasia_echarts.pro_testif(2,@str);

select @str;

5.帶有循環(huán)過程的存儲過程

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;

上接文章:Mysql學習筆記(5)-"數(shù)據(jù)庫設計" 和 "關聯(lián)查詢"

文章文集:JavaEE--學習筆記

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容