您好,登錄后才能下訂單哦!
MySQL中怎么使用存儲(chǔ)過程,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
存儲(chǔ)過程(Stored Procedure)是一種在數(shù)據(jù)庫中存儲(chǔ)復(fù)雜程序,以便外部程序調(diào)用的一種數(shù)據(jù)庫對(duì)象。目的是為了完成特定功能的SQL語句集,經(jīng)編譯創(chuàng)建并保存在數(shù)據(jù)庫中,用戶可通過指定存儲(chǔ)過程的名字并給定參數(shù)(需要時(shí))來調(diào)用執(zhí)行。說白了就是數(shù)據(jù)庫 SQL語言層面的代碼封裝與重用。創(chuàng)建的存儲(chǔ)過程通常保存在數(shù)據(jù)庫的數(shù)據(jù)字典中。
1.創(chuàng)建存儲(chǔ)過程
create procedure 存儲(chǔ)過程名(參數(shù)列表) begin 存儲(chǔ)過程體(一組合法的sql語句) end
參數(shù)列表包含3個(gè)部分:
參數(shù)模式 參數(shù)名 參數(shù)類型。
舉例:IN userid varchar(20)
參數(shù)模式有3個(gè):
鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)
in:傳入接收
out:輸出,作為返回值
inout:既可以作為輸入,也可作為輸出
begin ... end 使用:
如果存儲(chǔ)過程體僅有一句話,begin end 可以不寫
存儲(chǔ)過程的每條sql語句結(jié)尾必須加分號(hào)結(jié)束
存儲(chǔ)過程的結(jié)尾使用delimiter重新設(shè)置
delimiter $ ... $
2.調(diào)用存儲(chǔ)過程語法
CALL 存儲(chǔ)過程名(參數(shù)列表)
3.創(chuàng)建和調(diào)用案例解析
①.空參數(shù)列表
# 空參數(shù)存儲(chǔ)過程案例 # 創(chuàng)建存儲(chǔ)過程 DELIMITER $ #修改存儲(chǔ)過程的結(jié)束標(biāo)識(shí)符號(hào) CREATE PROCEDURE myP1() BEGIN insert into demo01 (id,name,age,sex) values (10011,"jalen",27,1), (10021,"xiar",26,1), (10031,"heli",24,0), (10041,"weiwei",28,1); END $ DELIMITER ; #把結(jié)束標(biāo)識(shí)改回去 # 調(diào)用存儲(chǔ)過程 CALL myP1(); # 查看表結(jié)果 select * from demo01;
②.in模式參數(shù)的存儲(chǔ)過程
輸入單個(gè)參數(shù)的存儲(chǔ)過程
# 2.1 in模式參數(shù)的存儲(chǔ)過程,輸入單個(gè)參數(shù) # 創(chuàng)建存儲(chǔ)過程 DELIMITER $ CREATE PROCEDURE myP2(IN InName varchar(20) ) BEGIN SELECT * from demo01 where name = InName; END $ DELIMITER ; #把結(jié)束標(biāo)識(shí)改回去
# 調(diào)用存儲(chǔ)過程 CALL myP2("jalen") ;
輸入多個(gè)個(gè)參數(shù)的存儲(chǔ)過程
# 2.2 in模式參數(shù)的存儲(chǔ)過程,輸入多個(gè)參數(shù) # 創(chuàng)建存儲(chǔ)過程 DELIMITER $ CREATE PROCEDURE myP3(IN InAge int ,IN InSex int ) BEGIN DECLARE res varchar(20) default ""; # 申明一個(gè)局部變量res SELECT name into res # 賦值 FROM demo01 WHERE age = InAge AND sex = InSex; SELECT res; #使用局部變量 END $ DELIMITER ;
# 調(diào)用存儲(chǔ)過程 CALL myP3(27,1);
③.out模式參數(shù)的存儲(chǔ)過程
# 3.out模式參數(shù)的存儲(chǔ)過程 #創(chuàng)建存儲(chǔ)過程 delimiter $ #修改存儲(chǔ)過程的結(jié)束標(biāo)識(shí) CREATE PROCEDURE myP4(IN name varchar(20), out age int, out sex int) BEGIN select demo01.age,demo01.sex into age,sex from demo01 where demo01.name = name; END $ DELIMITER ;
#調(diào)用 CALL myP4("jalen",@age,@sex); select @age,@sex;
④.inout模式參數(shù)的存儲(chǔ)過程
# 4.inout模式參數(shù)的存儲(chǔ)過程 #創(chuàng)建存儲(chǔ)過程 delimiter $ #修改存儲(chǔ)過程的結(jié)束標(biāo)識(shí) CREATE PROCEDURE myP5(inout m int ,inout n int) BEGIN set m := m+10; set n := n+10; END $ DELIMITER ;#改回原有的結(jié)束標(biāo)識(shí)分號(hào)
# 調(diào)用 set @a := 5,@b :=10; CALL myP5(@a,@b); select @a,@b;
4.刪除存儲(chǔ)過程
語法:drop procedure 存儲(chǔ)過程名稱
注意:一次只能刪除一個(gè)存儲(chǔ)過程
案例:drop procedure myP1;
5.查看存儲(chǔ)過程的信息
show create procedure 存儲(chǔ)名;
看完上述內(nèi)容,你們掌握MySQL中怎么使用存儲(chǔ)過程的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。