一、函数的含义


同样和存储过程一样,也是为了做一些批处理;里面存储着一系列sql语句,调用函数就是一次性执行这些语句。所以函数可以降低语句重复。

注意: 函数注重返回值,不注重执行过程,所以一些语句无法执行。所以函数并不是单纯的sql语句集合。

二、函数和存储过程的区别


  1. 存储过程可以有0个返回也可以有多个返回;比较适合场景是做批量插入和批量更新。
  2. 函数有且只有一个返回,适合做处理数据后返回一个结果。

三、基本使用


(一)语法

CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型
BEGIN 
    函数体
END

(二)组成结构

1. 参数列表

参数列表包含两个部分分别是参数名和参数类型。

2. 函数体

一个函数肯定要有RETURN语句,如果没有会报错,如果RETURN语句没有放置在函数体的最后也不报错,但是不建议这样。

3. 注意事项

  1. 如果函数体中只有一句话,则可以省略BEGIN ... END
  2. 同样需要使用DELIMITER来声明结束标记。

(三) 调用方式

SELECT 函数名(参数列表)结束标记

1. 示例1:

问题:返回公司的员工个数?

CREATE FUNCTION getCount() RETURNS INT
BEGIN
    # 定义返回变量
    DECLARE n INT DEFAULT 0;
    
    # 为变量赋值
    SELECT COUNT(*) INTO n
    FROM employees;
    
    # 返回
    RETURN n;
END$


# 调用函数
SELECT getCount()$

2. 示例2:

问题:根据部门名返回该部门的平均工资?

CREATE FUNCTION getAvgSalary(depName VARCHAR(20)) RETURUNS DUBLE
BEGIN 
    # 定义用户变量
    SET @avg_salary = 0;
    
    # 为变量赋值
    SELECT AVG(salary) INTO @avg_salary
    FROM employees e
    JOIN departments d
    ON e.department_id=d.id
    WHERE d.department_name = depName;
    
    # 返回
    RETURN @avg_salary;
END$

# 调用
SELECT getAvgSalary('IT')$

四、查看函数


SHOW CREATE FUNCTION 函数名;

五、删除函数


DROP FUNCTION 函数名;
最后修改:2021 年 02 月 01 日 11 : 00 PM
如果觉得我的文章对你有用,请随意赞赏