您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“MySQL數(shù)據(jù)庫之存儲過程怎么創(chuàng)建”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
前言:
stored procedure 完成特定功能的SQL語句集,存儲在數(shù)據(jù)庫中,經(jīng)過第一次編譯之后再次調(diào)用不需要編譯(效率較高)
都是為了可重復(fù)地執(zhí)行操作數(shù)據(jù)庫的SQL語句集合
都是一次編譯,多次執(zhí)行
標(biāo)識符不同,函數(shù)function 過程 procedure
函數(shù)中有返回值,且必須返回,而過程沒有返回值
過程無返回值類型,不能將結(jié)果直接賦值給變量;函數(shù)有返回值類型,調(diào)用時,除了在select中,必須將返回值賦值給變量
函數(shù)可以再select語句中直接使用,而過程不能
基本語法:
create procedure 過程名字([參數(shù)列表])
bengin
過程體
end
結(jié)束符
如果只有只有一條指令可以省略begin和end
create procedure my_pro1() select * from my_student;
過程基本上可以完成函數(shù)對應(yīng)的所有功能:
-- 修改語句結(jié)束符 delimiter $$ -- 創(chuàng)建過程 create procedure my_pro2() begin -- 求1到100之間的和 -- 創(chuàng)建局部變量 declare i int default 1; -- declare sum int default 0; -- 會話變量 set @sum = 0; -- 開始循環(huán)獲取結(jié)果 while i <= 100 do -- 求和 set @sum = @sum + i; set i = i + 1; end while; -- 顯示結(jié)果 select @sum; end $$ delimiter ;
-- 查看所有存儲過程 show procedure status [like 'pattern']; -- 查看過程的創(chuàng)建語句 show create procedure 過程名字\G
過程沒有返回值
基本語法:
call 過程名([實參列表]); -- eg: call my_pro2(); +------+ | @sum | +------+ | 5050 | +------+
基本語法:
drop procedure 過程名;
存儲過程的參數(shù)和函數(shù)一樣,需要制定其類型
但是存儲過程對參數(shù)還有額外的要求,自己的參數(shù)分類:
in:(值傳遞)參數(shù)從外部傳入,在過程內(nèi)部使用,可以是直接數(shù)據(jù),也可以是保存數(shù)據(jù)的變量
out:(引用傳遞)參數(shù)在過程中賦值,傳入必須是變量,如果有外部數(shù)據(jù),會被清空為null
inout:(引用傳遞)數(shù)據(jù)可以從外部傳入過程內(nèi)部使用,同時內(nèi)部操作之后,又回將數(shù)據(jù)返回給外部
代碼示例:
-- 創(chuàng)建3個會話變量 set @var1 = 1; set @var2 = 2; set @var3 = 3; -- 查詢會話變量 select @var1, @var2, @var3; +-------+-------+-------+ | @var1 | @var2 | @var3 | +-------+-------+-------+ | 1 | 2 | 3 | +-------+-------+-------+ 1 row in set (0.00 sec) -- 修改語句結(jié)束符 delimiter $$ -- 定義過程 create procedure my_pro3(in a int, out b int, inout c int) begin -- 查看傳入的3個數(shù)據(jù)值 select a, b, c; -- +------+------+------+ -- | a | b | c | -- +------+------+------+ -- | 1 | NULL | 3 | -- +------+------+------+ -- 修改3個變量值 set a = 10; set b = 20; set c = 30; select a, b, c; -- +------+------+------+ -- | a | b | c | -- +------+------+------+ -- | 10 | 20 | 30 | -- +------+------+------+ -- 查看會話變量 select @var1, @var2, @var3; -- +-------+-------+-------+ -- | @var1 | @var2 | @var3 | -- +-------+-------+-------+ -- | 1 | 2 | 3 | -- +-------+-------+-------+ -- 修改會話變量 set @var1 = 'a'; set @var2 = 'b'; set @var3 = 'c'; select @var1, @var2, @var3; -- +-------+-------+-------+ -- | @var1 | @var2 | @var3 | -- +-------+-------+-------+ -- | a | b | c | -- +-------+-------+-------+ end $$ delimiter ; -- 調(diào)用過程 call my_pro3(@var1, @var2, @var3); -- 再次查看會話變量 mysql> select @var1, @var2, @var3; +-------+-------+-------+ | @var1 | @var2 | @var3 | +-------+-------+-------+ | a | 20 | 30 | +-------+-------+-------+
分析:
1、實參傳入過程之后,實際上沒有改變外部變量的值,而是把值給了形參,out類型不能接收外部變量的值,默認(rèn)為null
2、當(dāng)過程執(zhí)行到end 的時候,如果是out或inout變量,會將形參的值重新賦值給實參變量
“MySQL數(shù)據(jù)庫之存儲過程怎么創(chuàng)建”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。