MySQL存儲過程 (即函數)

參考: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 / CASE

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 / 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經常使用函數總結

相關文章
相關標籤/搜索