一、存儲過程使用背景
- 通過把處理封裝在容易使用的單元內,簡化復雜的操作
- 不需要反復建立一系列的處理步驟,可以保證數據的完整性。簡化了后續人員的使用,減少了錯誤發生的可能性
- 簡化對變動的管理。如果使用的表名,或者列名,或者其他內容發生變化,只需要更改存儲過程,但是使用它的可以不用太過關注
這玩意如果不好理解的話,可以將存儲過程理解成一個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;