MySQL儲存過程 (即函式)

SolomonXie發表於2019-01-24

參考:mysql儲存過程詳細教程

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 ;

MySQL常用內建函式

參考:Mysql常用函式總結

相關文章