mysql自定義函數語法


創建函數

DELIMITER $$
DROP FUNCTION IF EXISTS `test` $$
CREATE FUNCTION `test`(a int ,b int)
RETURNS int 
BEGIN
  IF (A>B) THEN
    RETURN a+b;
  ELSE
    RETURN a-b;
  END IF;
END
DELIMITER;

 

 創建存儲過程

 

DELIMITER $$
DROP PROCEDURE IF EXISTS myProc $$
CREATE PROCEDURE myProc()
BEGIN
  DECLARE v_sex int;

  SELECT sex into v_sex from user where id=3;      // 取出sex 給 v_sex 賦值,select sex into v_sex //  SET vv=a+b; //賦值
  if(v_sex==0) THEN
    SELECT '男生';
  ELSE
    SELECT '女生';
  END IF;
END

DELIMTER;

調用存儲過程 call myProc();

delimiter就是告訴mysql解釋器,該段命令是否已經結束了,是否可以執行了。
默認情況下,delimiter是分號;,遇到分號就執行。
后面的雙美元符號 就是告訴mysql,遇到雙美元符號再執行

show function status; // 查看自定義函數

show procedure status; // 查看自定義存儲過程

輸入輸出參數

DELIMITER $$
DROP PROCEDURE IF EXISTS myReslt $$
CREATE PROCEDURE myReslt (IN a INT , IN b INT, OUT c INT)  // in 輸入參數,out輸出參數
BEGIN
SET c=a+b;
SELECT * FROM user WHERE id BETWEEN 2 AND c;
END

DELIMTER;

call myReslt (2,3,@c);
select @c;

 

存儲過程與自定義函數的區別:

存儲過程實現的過程要復雜一些,而函數的針對性較強;

存儲過程可以有多個返回值,而自定義函數只有一個返回值;

存儲過程一般獨立的來執行,而函數往往是作為其他SQL語句的一部分來使用;

 

存儲過程存在的必要性(好處):


存儲過程說白了就是把經常使用的SQL語句或業務邏輯封裝起來,預編譯保存在數據庫中,當需要的時候從數據庫中直接調用,省去了編譯的過程.

提高了運行速度;

同時降低網絡數據傳輸量(你覺得傳一堆SQL代碼快,還是傳一個存儲過程名字和幾個參數快


免責聲明!

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



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