理解存儲過程
存儲過程是獨立存在於表之外的數據庫對象,由被編譯在一起的一組Transact-SQL語句組成。它可以被客戶調用,也可以被另一個存儲過程或觸發器調用,它的參數可以被傳遞,它的出錯代碼也可以被檢測。
創建存儲過程
一個存儲過程包括名字,參數列表,以及可以含有很多SQL語句的SQL語句集。下面為一個存儲過程的定義過程:
create procedure proc_name (in parameter integer)
begin
declare variable varchar(20);
if parameter=1 then
set variable='MySQL';
else
set variable=’PHP’;
end if;
insert into tb (name) values (variable);
end;
MySQL中存儲過程的建立以關鍵字create procedure開始,後面僅跟存儲過程的名稱和參數。MySQL的存儲過程名稱不區分大小寫,例如PROCE1()和proce1()代表同一存儲過程名。存儲過程名不能與MySQL數據庫中的內建函數重名。
存儲過程的參數一般由3部分組成。第一部分可以是in、out或inout。in表示向存儲過程中傳入參數;out表示向外傳出參數;inout表示定義的參數可傳入存儲過程並可以被存儲過程修改後傳出存儲過程,存儲過程默認為傳入參數,所以參數in可以省略。第二部分為參數名。第三部分為參數的類型,該類型為MySQL數據庫中所有可用的字段類型,如果有多個參數,參數之間可以用逗號進行分割。
MySQL存儲過程的語句塊以begin開始,以end結束。語句體中可以包含變量的聲明、控制語句、SQL查詢語句等。由於存儲過程內部語句要以分號結束,所以在定義存儲過程前應將語句結束標志“;”更該為其他字符,並且該字符應該在存儲過程中出現的幾率也應該較低,可以用關鍵字delimiter更改,例如:
MySQL>delimiter //
存儲過程創建之後,可用如下語句進行刪除,參數proc_name指存儲過程名。
drop procedure proc_name