數據庫自定義函數


一、函數

  在數據庫中都有函數,這些函數屬於系統函。除此之外用戶也可以編寫用戶自定義函數。用戶定義函數是存儲在數據庫中的代碼塊,可以把值返回到調用程序。調用時如同系統函數一樣,如max(value)函數,其value被稱為參數。函數一般功能比較簡單,對於mysql函數只有傳入參數,不像存儲過程一樣,有輸入輸出參數。

  數據庫函數特點如下:

  • 存儲函數將向調用者返回一個且僅返回一個結果值。
  • 存儲函數嵌入在sql中使用的,可以在select中調用,就像內建函數一樣,比如cos()、hex()。
  • 存儲函數的參數類型類似於IN參數。

二、自定義函數

自定義函數簡單語法:

CREATE FUNCTION 函數名稱(
  變量名稱 類型,
  變量名稱 類型
)
RETURN 類型
BEGIN
  -- 聲明, 語句要完成的操作,
RETURN 變量;
END;

三、實例

  例子中的函數使用mysql作為例子。 表結構如下:

DROP TABLE IF EXISTS `person`;
CREATE TABLE `person` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

   1、不帶參數的函數

DROP FUNCTION IF EXISTS get_count;
 -- 定義函數
CREATE FUNCTION get_count() 
RETURNS INT -- 返回值類型
BEGIN 
     RETURN (SELECT COUNT(*) FROM person);
END;
-- 調用
SELECT get_count() AS 'total';

   表示獲取person表的所有記錄,沒有參數,有數值返回值。

  2、帶有參數的函數

DROP FUNCTION IF EXISTS get_age;
CREATE FUNCTION get_age(
         id INT(11)  -- 參數(參數可以多個)
)
RETURNS INT(11)    -- 返回值類型(只能有一個返回值)
BEGIN 
    DECLARE age INT; -- 定義變量
    SET age = (SELECT p.age FROM person p where p.id = id);
    IF(ISNULL(age)) THEN -- 查詢到的年齡不存在(如id錯誤,沒有記錄存在)
        RETURN 0; 
    ELSE
        RETURN age;
    END IF;
END;
-- 函數調用
SELECT get_age(2) as 'age';

  表示通過id獲取年齡,有id參數,有數值返回值。

  3、函數其他命令

SELECT get_age(2);    -- 函數的調用
SHOW FUNCTION STATUS; -- 查看所有函數
SHOW CREATE FUNCTION get_age; -- 查看具體函數
DROP FUNCTION  get_age;  -- 刪除查看具體函數

  函數的功能一般都是比較簡單的,如求某個值,格式轉換等。不像存儲過程,一般邏輯都比較復雜。


免責聲明!

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



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