MySQL使用存儲過程


一、存儲過程使用背景

  • 通過把處理封裝在容易使用的單元內,簡化復雜的操作
  • 不需要反復建立一系列的處理步驟,可以保證數據的完整性。簡化了后續人員的使用,減少了錯誤發生的可能性
  • 簡化對變動的管理。如果使用的表名,或者列名,或者其他內容發生變化,只需要更改存儲過程,但是使用它的可以不用太過關注

    這玩意如果不好理解的話,可以將存儲過程理解成一個Java中的方法

二、創建存儲過程

創建一個存儲過程,用於查詢工資的最小值

create procedure pro_min_salary()
begin
select min(salary) as  min_salary from salaries;
end;

如果使用MySQL的命令行創建存儲過程需要注意分號的處理 ;

使用call調用存儲過程

call pro_min_salary();

創建存儲過程還可以使用參數,比如

create procedure pro_all_salary(
out min_salary decimal(8,2),
out max_salary decimal(8,2),
out avg_salary decimal(8,2)
)
begin
    select min(salary) into min_salary from salaries;
    select max(salary) into  max_salary from salaries;
    select avg(salary) into  avg_salary from salaries;
end;

每個參數必須要指定類型,這個例子中指定了三個接受參數 ,分別是最低工資 min_salary ,最高工資 max_salary,以及平均工資 avg_salary。關鍵字out指的是的相應的參數是從存儲過程中傳出的一個值,就是返回給調用者。存儲過程的代碼位於begin和end之間。在這里他們是一組查詢語句,用於檢索值保存在相應的變量中。

OUT 從存儲過程中傳出

IN 傳遞給存儲過程

INOUT對存儲過程傳入傳出

對於它調用存儲過程就變成了

call pro_all_salary(@min_salary,@max_salary,@avg_salary);

這里不會有值傳出,只是調用了存儲過程將值存儲在了各自的變量中。在MySQL中所有的變量都得以@符號開始

這是如果查看變量的話就可以看到結果了

select @max_salary;

三、查看存儲過程

查詢所有存儲過程

show procedure status ;

如果要查詢某一個存儲過程的話,可以使用like

show procedure status like '%all_%';

四、刪除存儲過程

刪除存儲過程的話 drop proceduce  存儲過程名

drop procedure aaa;

這樣的話如果存儲過程不存在的  就會報錯 [42000][1305] PROCEDURE employees.aaa does not exist

所以最好寫成

drop procedure if exists aaa;

 


免責聲明!

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



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