# 函数
/*
与存储过程的区别:
存储过程:可以有0个,也可以有多个返回,适合做批量插入、批量更新
函数:有且只有一个返回,适合做处理数据后返回一个结果
*/
# 一、创建语法
/*
create function 函数名(参数列表) returns 返回值
begin
函数体
end
注意:
1.参数列表 包含两部分:
参数名 参数类型
2.函数体:肯定会有return语句,如果没有会报错
如果return语句没有放在函数体的最后也不会报错,但不建议
3.函数体仅有一句话时,则可以省略begin end
4.使用delimiter语句设置结束标记
*/
# 二、调用语法
/*
select 函数名(参数列表)
*/
# 1.无参有返回
# 案例:返回公司的员工个数
DELIMITER $
CREATE FUNCTION myf1() RETURNS INT
BEGIN
DECLARE c INT DEFAULT 0; # 定义变量
SELECT COUNT(*) INTO c
FROM employees;
RETURN c;
END $
SELECT myf1();
# 2.有参有返回
# 案例1: 根据员工名,返回它的工资
DELIMITER $
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('kochhar');
# 案例2:根据部门名,返回部门的平均工资
DELIMITER $
CREATE FUNCTION myf3(deptName VARCHAR(20)) RETURNS DOUBLE
BEGIN
DECLARE sal DOUBLE;
SELECT AVG(salary) INTO sal
FROM employees AS e
JOIN departments AS d
ON e.department_id=d.department_id
WHERE d.department_name=deptName;
RETURN sal;
END $
SELECT myf3('IT');
# 三、查看函数
SHOW CREATE FUNCTION myf3;
# 四、删除函数
DROP functionmyf3;
# 案例1:创建函数,实现传入两个float,返回二者之和
DELIMITER $
CREATE FUNCTION test_fun1(num1 FLOAT,num2 FLOAT) RETURNS FLOAT
BEGIN
DECLARE SUM FLOAT DEFAULT 0;
SET SUM=num1+num2;
RETURN SUM;
END $
SELECT test_fun1(1,2);
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交