SQL的Stored Procedure
儲存過程,指的其實就是一個函式
。
既然是函式,那麼就會涉及這幾個要點:定義函式、使用函式、變數、引數、返回值等。
為了方便理解,以下就不再叫它儲存過程,而直接叫函式了。
在MySQL中,這幾個要點的語法如下:
- 定義函式:
CREATE PROCEDURE 函式名(引數列表) BEGIN ...具體的SQL語句... END
- 使用函式:
CALL 函式名(引數列表);
-
引數型別:
-
IN
: 引數被拷貝為函式內區域性變數,不影響原本的變數值。func(IN age INT)...
-
OUT
: 引數只是傳了個引用,函式內修改的話外部變數也會變。 -
INOUT
: 函式內修改的話外部變數也會變。
-
- 宣告變數:
DECLARE 變數名 型別 DEFAULT 預設值;
- 設定變數:
SET @變數名="Jason"
- 使用變數:呼叫時用
@變數名
,print顯示時用SELECT @變數名;
函式定義即呼叫
單行函式:
CREATE PROCEDURE 函式名(引數) 一句SQL語句;
-- 如:
CREATE PROCEDURE GreetWorld(@whom) SELECT CONCAT(`Hello`, @whom);
多行函式:
--
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 ;
呼叫函式:
-- 變數賦值
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 / CASE
IF-ELSE結構:
IF param=0 THEN
update t set s1=s1+
ELSE
update t set s1=s1+
END IF ;
CASE結構:
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 / REPEAT / LOOP / ITERATE
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 ;