mysql 存儲過程


存儲過程

1.什么是存儲過程

  • 一組可編程函數,是為了滿足特定功能的SQL語句集
  • 存儲過程就是具有名字的一段代碼,用來完成個特定的功能
  • 創建的存儲過程保存在數據庫的數據字典中

2.為什么要用存儲過程

  • 將重復性很高的操作,封裝到一個存儲過程中,簡化了對這些SQL的調用

  • 批量處理

  • 統一接口,確保數據安全

  • 相對於Oracle來說,Mysql的存儲過程相對功能較弱,使用較少

3.存儲過程的創建和調用

1. delimiter$$

  • 他與存儲過程無關

  • delimiter$$ 將標准分隔符 - 分號 (😉 更改為 兩個 $

  • 將存儲過程作為整體,而不是一次解釋每條語句

  • 告訴mysql解釋器,該段命令已經結束了。默認情況下,delimiter 是分號,在命令行客戶端中,如果有一行命令以分號結束,回車后,mysql將會執行該命令。如果不希望這樣,就可以 delimiter$$ ,這樣只有在 $$出現后,mysql解釋器才會執行 這段語句



    emp表

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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM