存儲過程
1.什么是存儲過程
- 一組可編程函數,是為了滿足特定功能的SQL語句集
- 存儲過程就是具有名字的一段代碼,用來完成個特定的功能
- 創建的存儲過程保存在數據庫的數據字典中
2.為什么要用存儲過程
-
將重復性很高的操作,封裝到一個存儲過程中,簡化了對這些SQL的調用
-
批量處理
-
統一接口,確保數據安全
-
相對於Oracle來說,Mysql的存儲過程相對功能較弱,使用較少
3.存儲過程的創建和調用
1. delimiter$$
-
他與存儲過程無關
-
delimiter$$ 將標准分隔符 - 分號 (😉 更改為 兩個 $
-
將存儲過程作為整體,而不是一次解釋每條語句
-
告訴mysql解釋器,該段命令已經結束了。默認情況下,delimiter 是分號,在命令行客戶端中,如果有一行命令以分號結束,回車后,mysql將會執行該命令。如果不希望這樣,就可以
delimiter$$,這樣只有在$$出現后,mysql解釋器才會執行 這段語句

2.創建和調用存儲過程
# 創建存儲過程
CREATE PROCEDURE 名稱()
BEGIN
語句
END$$
# 調用存儲過程
CALL 名稱()
如圖:

右擊鼠標 運行已選擇的
然后運行CALL show_content() 這句,就會得到執行結果。
將查詢窗口關閉,重新打開一個新的查詢窗口,可以直接使用 CALL show_content ,即可執行得到結果

3.查看存儲過程
- 查看所有存儲過程:
SHOW PROCEDURE STATUS; - 查看指定數據庫中的存儲過程:
SHOW PROCEDURE STATUS WHERE DB = 'publiccms';

-
查看指定存儲過程源碼 :
SHOW CREATE PROCEDURE show_emp; -
刪除指定存儲過程:
DROP PROCEDURE show_emp;
4.存儲過程變量
delimiter $$
CREATE PROCEDURE test()
BEGIN
-- 聲明變量,默認為空
DECLARE res VARCHAR(255) DEFAULT '';
DELETE x,y int DEFAULT 0 -- 聲明兩個變量,類型為int ,默認為 0
-- 賦值 set 方式
set x = 3;
set y = 4;
DECLARE avgRes DOUBLE DEFAULT 0;
-- 另一種賦值方式 into 方式
select avg(salary) into avgRes from emp
end$$
-- 什么的變量,如 x,y等,只能在 begin end 之間有效
5.存儲過程參數傳遞
in
-- 根據傳入的名稱,獲取對應的信息
delimiter $$
create PROCEDURE getName(in name VARCHAR(255))
BEGIN
SELECT * FROM emp where ename = name;
end$$
delimiter ;
CALL getName('魯班')

out
-- 傳入姓名,得出薪水
delimiter $$
create procedure getSalary(in name varchar(255),out money int)
BEGIN
select salary into money from emp where ename = name;
end$$
delimiter ;
CALL getSalary('李白',@s) -- @s 代表返回的數
select @s; -- 也可以寫為 select @s from DUAL
-- DUAL 是一個虛擬的表

inout 既是輸入,又是輸出
delimiter $$
create procedure test(inout num int,in inc int) -- inout ,既是輸入,也是輸出
BEGIN
set num = num + inc;
end$$
delimiter ;
set @num1 = 20; -- @ 代表地址傳遞
CALL test(@num1, 10);
select @num1;

