1. 程式人生 > >MySQL資料庫之儲存過程

MySQL資料庫之儲存過程

儲存過程(Stored Procedure):一組可程式設計的函式,是為了完成特定功能的SQL語句集,經編譯建立並儲存在資料庫中,使用者可通過指定儲存過程的名字並給定引數(需要時)來呼叫執行。

為什麼要使用儲存過程??

①將重複性很高的一些操作,封裝到一個儲存過程中,簡化了對這些SQL的呼叫 ②批量處理:SQL+迴圈,減少流量,也就是“跑批” ③統一介面,確保資料的安全

相對於oracle資料庫來說,MySQL的儲存過程相對功能較弱,使用較少。

建立儲存過程

delemiter //
create procedure 儲存過程名([儲存過程引數列表])
begin
    set 引數名=引數;
    SQL語句
end //

為什麼使用delemiter??

mysql預設以分號作為sql語句的結束來進行執行,當我們在建立儲存過程時,為了不讓完整的儲存過程語句由於分號而提前執行,需要臨時規定以//或者$$來作為結束符號。這樣的話,建立儲存過程時,中間的分號會被忽略,直到遇到//符號才執行語句

儲存過程引數分類儲存過程可以有0個或多個引數,用於儲存過程的定義。 3種引數型別:IN輸入引數表示呼叫者向過程傳入值(傳入值可以是字面量或變數)

delimiter //
create procedure 儲存過程(in 變數名 型別)
begin
    set 變數名=值;
    SQL語句
end //

call 儲存過程名(引數值)

OUT輸出引數表示過程向呼叫者傳出值(可以返回多個值)(傳出值只能是變數)

delimiter //
create procedure 儲存過程(out 變數名 型別)
begin
    set 變數名=值;
    SQL語句
end  //

call 儲存過程名(引數值)

ex: 

create  procedure  out_param(out  p_outint)       begin         select  p_out;         set  p_out = 2;         select  p_out;       end

set  @p_out = 1; call  

out_param(@p_out); select  @p_out;

INOUT輸入輸出引數既表示呼叫者向過程傳入值,又表示過程向呼叫者傳出值(值只能是變數)

create procedure out_param(inout p_out int)
      begin
        select p_out;
        set p_out=2;
        select p_out;
      end

set @p_out=1;
call out_param(@p_out);
select @p_out;

呼叫儲存過程

set @引數名
call 儲存過程名字([引數])