參考:mysql存儲過程詳細教程mysql
SQL的Stored Procedure
存儲過程,指的其實就是一個函數
。
既然是函數,那麼就會涉及這幾個要點:定義函數、使用函數、變量、參數、返回值等。sql
爲了方便理解,如下就再也不叫它存儲過程,而直接叫函數了。
在MySQL中,這幾個要點的語法以下:函數
CREATE PROCEDURE 函數名(參數列表) BEGIN ...具體的SQL語句... END
CALL 函數名(參數列表);
參數類型:oop
IN
: 參數被拷貝爲函數內局部變量,不影響本來的變量值。func(IN age INT)...
OUT
: 參數只是傳了個引用,函數內修改的話外部變量也會變。INOUT
: 函數內修改的話外部變量也會變。DECLARE 變量名 類型 DEFAULT 默認值;
SET @變量名="Jason"
@變量名
,print顯示時用SELECT @變量名;
單行函數:.net
CREATE PROCEDURE 函數名(參數) 一句SQL語句; -- 如: CREATE PROCEDURE GreetWorld(@whom) SELECT CONCAT('Hello', @whom);
多行函數:code
-- DELIMITER // -- 分隔符 CREATE PROCEDURE 函數名(參數類型 參數名 數據類型) BEGIN 具體的SQL語句 具體的SQL語句 END // DELIMITER ; -- 分隔符 -- 示例: DELIMITER // CREATE PROCEDURE funcName(IN p_in int) BEGIN SELECT p_in; SET p_in=2; SELECT p_in; END // DELIMITER ;
調用函數:blog
-- 變量賦值 SET @p_in=1; -- 調用函數 CALL funcName(@p_in);
函數(存儲過程)的其它操做:教程
-- 修改函數 ALTER PROCEDURE ..... -- 刪除函數 DROPPROCEDURE 函數名 ;
-- 聲明一個函數內的新變量(必須放在函數最上方) DECLARE 變量名 數據類型 DEFAULT 默認值; -- 設置變量值 SET @x = 'Goodbye Cruel World'; -- 或 SELECT 'Hello World' into @x;
IF-ELSE結構:get
IF param=0 THEN update t set s1=s1+ ELSE update t set s1=s1+ END IF ;
CASE結構:class
CASE var WHEN 0 THEN insert into t values(17); WHEN 1 THEN insert into t values(18); ELSE insert into t values(19); END CASE ;
WHILE-DO方式
WHILE var < 100 DO 具體的SQL語句。 ENDWHILE ;
REPEAT方式:
REPEAT 具體SQL語句。 UNTIL var <= 100 ENDREPEAT ;
LOOP方式:
label: LOOP 具體SQL語句。 LEAVE label ; END LOOP
其中,採用循環標籤標籤名:
的方式能夠加在While / Repeat / Loop前,這樣就能夠使用leave
語句退出循環,至關於break的意思。
ITERATE迭代方式:
label: LOOP IF var = 3 THEN ITERATE label ; END IF ; IF var >= 5 THEN LEAVE label ; END iF ; END LOOP ;