作爲一個水平無法溢出的菜鳥,還是老老實實認真學習的好。在系統的學習Mysql存儲過程之前,還需要部分的解釋一下Mysql中的一些在存儲過程中出現的關鍵字以及語法的使用。
decimal(2,1) 指定義的數值含有兩位有效長度,其中包含一位小數。DECLARE(declare)在mysql中是聲明一個變量的意思。DEFAULT 在sql中爲列插入默認值。
例:
DECLARE val int DEFAULT 6; 聲明一個變量val,其類型爲int,自定義默認值爲6。
in :給參數傳入值,定義的參數就得到了值。out:模式定義的參數只能在過程體內部賦值,表示該參數可以將某
個值傳遞迴調用他的過程(在存儲過程內部,該參數初始值爲 null,無論調用者是否給存儲過程參數設置值) inout:
調用者還可以通過 inout 參數傳遞值給存儲過程,也可以從存儲過程內部傳值給調用者。
例:
CREATE PROCEDURE test (in type INT);/*將調用方法時傳入的參數賦值給type*/
CREATE PROCEDURE avgid(
OUT avgi DECIMAL(3,1) /*要輸出的參數*/
)
BEGIN
SELECT AVG(id) INTO avgi FROM `user`; /*通過在過程內部將值賦予給參數*/
END;
CALL avgid(@avgi); /*調用該存儲過程*/
SELECT @avgi; /*獲取查詢值*/
關於inout的使用:
CREATE
PROCEDURE
p3(INOUT age
INT
)
BEGIN
SET
age := age + 20;
END
set
@currage =18
call p3(@currage)/*存儲過程在調用currage的時候,會將該值直接賦值到存儲過程中並執行(所謂的內部傳
值)*/
DORP PROCEDURE IFEXISTS procedureName;/*刪除存儲過程,刪除後面無需調用括號*/
帶參的存儲過程:
1. create procedure procedureName(
2. out min decimal(8,2),
3. out avg decimal(8,2),
4. out max decimal(8,2)
5. )
6. BEGIN
7. select MIN(price) INTO min from order;
8. select AVG(price) into avg from order;
9. select MAX(price) into max from order;
END;1. -- 由於過程指定三個參數, 故調用必須要參數匹配
call procedureName(@min, @avg, @max);