函数和存储过程基本相同,唯一的区别就是:
- 存储过程可以有0个返回值,也可以有多个返回值,适合做批量插入,批量更新操作;
- 函数有且仅有一个返回值,适合做处理数据后返回一个结果。
函数的创建
CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型
BEGIN
函数体
END
#调用
SELECT 函数名(参数列表);
注意:
- 参数列表包含两部分:参数名 参数类型
- 函数体中一定有return语句,如果没有会报错,如果return语句没有放在最后也不会报错,但是不建议
- 函数体如果只有一句,则可以省略GEBIN 和 END
- 使用DELIMITER语句设置结束标记
无参有返回
案例:返回公司的员工个数
DELIMITER $
CREATE FUNCTION myf1() RETURNS INT
BEGIN
DECLARE c INT DEFAULT 0; #定义局部变量
SELECT COUNT(*) INTO c #变量赋值
FROM employees;
RETURN c;
END $
#调用
SELECT myf1() $
有参有返回
案例:根据员工名,返回其工资
DELIMITER $
CREATE FUNCTION myf2(empName VARCHAR(20)) RETURNS FLOAT
BEGIN
SET @sal= 0; #定义用户变量
SELECT salary INTO @sal #变量赋值
FROM employees
WHERE last_name=empName;
RETURN @sal;
END $
#调用
SELECT myf2('K_ing') $
查看函数的创建
SHOW CREATE FUNCTION 函数名;
删除函数
DROP FUNCTION 函数名;