含義
一組預先編譯好的sql語句的集合,理解成批處理語句
1、提高代碼的重用性
2、簡化操作
3、減少了編譯次數並且減少了和數據庫服務器的連接次數,提高了效率
函數和存儲過程的區別
存儲過程:可以有0個返回,也可以有多個返回值,適合做批量插入、批量更新
函數:有且僅有必須有1個返回,適合做處理數據後返回一個結果
創建語法
CREATE FUNCTION 函數名(參數列表) RETURNS 返回類型
BEGIN
函數體
END
注意:
1 參數列表 包含兩部分:參數名,參數類型
2 函數體:肯定會有return語句,如果沒有回報錯
如果return 語句沒有放在函數體的最後也不會報錯,但不建議
3 函數體中僅有一句話,則可以省略begin end
4 使用delimiter語句設置結束標記
調用語法
SELECT 函數名(參數列表);
案例:
1 無參有返回
案例:返回公司的員工個數
CREATE FUNCTION myf1() RETURNS INT
BEGIN
DECLARE c INT DEFAULT 0;#定義變量
SELECT COUNT(*) INTO c #變量賦值
FROM employees;
RETURN c;
END $
SELECT myf1() $
2 有參有返回
案例1:根據員工名,返回它的工資
CREATE FUNCTION myf2(empName VARCHAR(20)) RETURNS DOUBLE
BEGIN
SET @sal=0;#定義用戶變量
SELECT salary INTO @sal
FROM employees
WHERE last_name=empName;
RETURN @sal;
END $
SELECT myf2('k_ing') $
案例2:根據部門名,返回該部門的平均工資
CREATE FUNCTION myf3(deptName VARCHAR(20)) RETURNS DOUBLE
BEGIN
DECLARE sal DOUBLE;
SELECT AVG(salary) INTO sal
FROM employees e
INNER JOIN departments d
ON e.department_id=d.department_id
WHERE d.department_name=deptName;
RETURN sal;
END $
SELECT myf3('IT') $
查看/刪除 函數
查看函數
SHOW CREATE FUNCTION myf3;
刪除函數
DROP FUNCTION myf3;