MySQL自定義函數與存儲過程的創建、使用、刪除


  前言

  日常開發中,可能會用到數據庫的自定義函數/存儲過程,本文記錄MySQL對自定義函數與存儲過程的創建、使用、刪除的使用

  

  通用語法

  事實上,可以認為存儲過程就是沒有返回值的函數,創建/使用/刪除都非常相似,在Navicat可視化工具中,自定義函數/存儲過程都歸類為函數

 

  定義變量

-- 定義變量,以及賦默認值0
DECLARE c INT(2) DEFAULT(0);

 

  設置變量

-- 設置變量值
SET c = c + 1;

 

 

  流程控制

-- 流程控制,多條件使用 AND/OR
IF c < 0 OR c = 0 THEN
    set c = 0;
ELSEIF c IS NULL THEN
    set c = 0;
ELSE
    set c = c;
END IF;

 

  循環語句

-- 循環語句
WHILE c <= 10 DO

    SET c = c + 1;
END WHILE;

 

  自定義函數

  創建

-- 創建函數
DROP FUNCTION IF EXISTS test_fun;
CREATE FUNCTION test_fun ( a INT(2), b INT(2) ) RETURNS INT(2) BEGIN
    -- 定義變量,以及賦默認值
    DECLARE c INT(2) DEFAULT(0);
    DECLARE i INT(2) DEFAULT(1);
    
    -- 流程控制
    IF a < 0 OR b < 0 THEN
        set a = 0;
        set b = 0;
    ELSEIF a IS NULL AND b IS NULL THEN
        set a = 0;
        set b = 0;
    ELSE
        set a = a;
        set b = b;
    END IF;
    
    -- 設置變量值
    SET c = a + b;
    
    -- 循環
    WHILE i <= 10 DO
        SET c = c + i;
        
        SET i = i + 1;
    END WHILE;

    -- return返回值
    RETURN c;
END;

 

 

 

  使用

-- 使用函數
SELECT test_fun ( 1, 2 );

 

 

 

  刪除

-- 刪除函數
DROP FUNCTION test_fun;

 

 

 

  存儲過程

  創建

-- 創建存儲過程
DROP PROCEDURE IF EXISTS test_pro;
CREATE PROCEDURE test_pro ( a INT(2), b INT(2) ) BEGIN
    -- 定義變量,以及賦默認值
    DECLARE c INT(2) DEFAULT(0);
    
    -- 流程控制
    IF a < 0 OR b < 0 THEN
        set a = 0;
        set b = 0;
    ELSEIF a IS NULL AND b IS NULL THEN
        set a = 0;
        set b = 0;
    ELSE
        set a = a;
        set b = b;
    END IF;
    
    -- 設置變量值
    SET c = a + b;
    
    -- 關閉自動提交,mysql每次執行一條語句都默認自動提交,去掉自動提交可大大提高批量操作性能
    SET autocommit = 0;
    
    -- 循環
    WHILE c <= 10 DO
        -- 執行SQL語句,獲取1-4隨機數
        SELECT floor( 1 + rand() * 4 );
        
        SET c = c + 1;
    END WHILE;
    
    -- 開啟自動提交
    SET autocommit = 1;

    -- 模擬返回值,存儲過程不能return
    SELECT c;
END;

 

 

  使用

-- 使用存儲過程
CALL test_pro ( 1, 2 );

 

 

  刪除

-- 刪除存儲過程
DROP PROCEDURE test_pro;

 

 

   后記

  MySQL對自定義函數與存儲過程的創建、使用、刪除的使用暫時先記錄到這,后續再進行補充


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM