1. 含義
一組預先編譯好的SQL語句的集合
函數(shù)與存儲過程的不同點在于:存儲過程可以有多個返回声功,但是函數(shù)有且僅有一個返回
存儲過程適合做批量的增刪改操作,函數(shù)適合處理數(shù)據(jù)返回一個結(jié)果這種需求
2. 好處
提高代碼的重用性
簡化操作
減少了編譯次數(shù)并且減少了和數(shù)據(jù)庫服務器的連接次數(shù)麸澜,提高了效率
3. 語法
創(chuàng)建
CREATE FUNCTION 函數(shù)名(參數(shù)列表) RETURNS 返回類型
BEGIN
-----函數(shù)體-----
END
注意:
1. 參數(shù)列表包含兩部分:參數(shù)名 參數(shù)類型
2. 函數(shù)體:肯定有return語句,如果沒有會報錯
3. 如果函數(shù)體只有一條語句画饥,則BEGIN和END可以省略
4. 函數(shù)中的每條SQL語句的結(jié)尾要求必須加分號,存儲過程的結(jié)尾可以使用 DELIMITER 重新設置,例:DELIMITER $
調(diào)用
SELECT 函數(shù)名(參數(shù)列表)
4. 實例
無參有返回
- 案例:返回公司的員工個數(shù)
-- 創(chuàng)建
CREATE FUNCTION fun1 () RETURNS INT
BEGIN
DECLARE result INT ;
SELECT
COUNT(*) INTO result
FROM
`employees` ;
RETURN result ;
END $
-- 調(diào)用
SELECT
fun1 () $
有參有返回
- 案例:根據(jù)員工名返回工資
-- 創(chuàng)建
CREATE FUNCTION fun2 (`name` VARCHAR (25)) RETURNS DOUBLE
BEGIN
DECLARE result DOUBLE ;
SELECT
`salary` INTO result
FROM
`employees` WHERE `last_name` = `name` ;
RETURN result ;
END $
-- 調(diào)用
SELECT
fun2 ('Kochhar') $
- 案例:根據(jù)部門名返回該部門的平均工資
-- 創(chuàng)建
CREATE FUNCTION fun4 (`dept_name` VARCHAR (3)) RETURNS DOUBLE (10, 2)
BEGIN
DECLARE result DOUBLE ;
SELECT
AVG(`salary`) INTO result
FROM
`employees` AS e
INNER JOIN `departments` AS d
ON e.`department_id` = d.`department_id`
WHERE d.`department_name` = `dept_name`
GROUP BY d.`department_id` ;
RETURN result ;
END $
-- 調(diào)用
SELECT
fun4 ('Shi') $
查看與刪除
- 查看
SHOW CREATE FUNCTION myf3 ;
- 刪除
DROP FUNCTION myf3 ;