一、函數
在數據庫中都有函數,這些函數屬於系統函。除此之外用戶也可以編寫用戶自定義函數。用戶定義函數是存儲在數據庫中的代碼塊,可以把值返回到調用程序。調用時如同系統函數一樣,如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; -- 刪除查看具體函數
函數的功能一般都是比較簡單的,如求某個值,格式轉換等。不像存儲過程,一般邏輯都比較復雜。