MySQL存儲過程與函數

存儲過程的好處:數據庫

  1. 業務邏輯被「隱藏」在數據庫裏面,從而避免敏感的數據被透露
  2. 能簡化應用程序代碼
  3. 跨平臺性
  4. 若是您必須一次執行幾個語句,一個存儲過程比客戶端程序逐條地執行語句要快的多,由於不須要任何的來往返數據

CREATE函數

    [DEFINER = {user | CURRENT_USER}].net

    PROCEDURE<name> (PARAMETER(S)...)get

    [characteristic(s)...] routine_bodyio

    The syntax for creating a function is:function

CREATE變量

    [DEFINER = {user | CURRENT_USER }]數據類型

    FUNCTION sp_name ([parameter])程序

RETURNS typeim

[characteristic(s)...] routine_body

  • CREATE 建立
  • DEFINER 定義者,表示存儲過程或者函數的全部者,若是省略,講使用默認全部者(當前用戶)
  • RPOCEDURE<name>  表示建立一個名字爲name的存儲過程
  • FUNCTION<name> 表示建立一個名稱爲name的函數  

        【IN | OUT | INOUT】<parameter name> type

  • IN 指參數是一個輸入變量,它僅向過程提供一個值
  • OUT 指參數是隻是用來存儲返回值
  • INOUT 指參數可用於輸入變量和返回值
  • parameter name(參數名稱)是Type的類型名
  • RETURNS 表示返回數據類型
  • DETERMINISTIC 肯定性
  • NOT DETERMINISTIC 非肯定性

 

實例1、

CREATE PROCEDURE user_avg(OUT average NUMERIC(5,2))
BEGIN
SELECT AVG(age) INTO average FROM users
END;

執行該存儲過程:

CALL user_avg(@a);

SELECT @a;

 

實例2、

CREATE FUNCTION is_young(uuname VARCHAR(64))
RETURNS BOOLEAN
DETERMINISTIC
BEGIN
DECLARE age_check DECIMAL(5,2);
DECLARE is_young BOOLEAN;
SELECT age INTO age_check FROM users WHERE username =uuname;

IF (age_check<40) THEN
    SET is_young =1;
ELSE
    SET is_young =0;
END IF;

RETURN(is_young);
END

數據庫存在的admin1的時候返回1

數據庫不存在的admin11的時候返回0

相關文章
相關標籤/搜索