函数与存储过程的作用类似,但与存储过程相比,函数有如下不同:
- 函数有且仅有一个返回值,适合做处理后返回一个结果的业务
- 参数列表仅包含两个部分:参数名和参数类型
创建函数
语法:
create function 函数名(参数列表) returns 返回值的类型
begin
函数体
end
注意:
- 函数体中必须有 return 语句,否则会报错。
- return 语句没有放在函数体的最后是不会报错的,但不推荐这么做。
- 若函数体中只有一句指令,则可省略
BEGIN END
。 - 使用 delimiter 设置函数的结束标记。
调用函数
语法:
select 函数名(参数列表);
案例演示
- 无参有返回
例子:获取总员工个数
delimiter $
create function myf1() returns int
begin
declare c int default 0;
select count(*) into c
from employees;
return c;
end $
delimiter ;
select myf1();
Q:什么时候变量名前加@,什么时候不加?
结果:
MariaDB [myemployees]> select myf1();
+--------+
| myf1() |
+--------+
| 107 |
+--------+
1 row in set (0.002 sec)
- 有参有返回
例子:根据部门名,返回部门员工的平均工资
delimiter $
create function myf2(deptName varchar(20)) returns double
begin
set @avg_sal=0;
select avg(salary) into @avg_sal
from departments d
left join employees e on d.department_id=e.department_id
where d.department_name=deptName;
return @avg_sal;
end $
delimiter ;
select myf2('Adm');
结果:
MariaDB [myemployees]> select myf2('Adm');
+-------------+
| myf2('Adm') |
+-------------+
| 4400 |
+-------------+
1 row in set (0.003 sec)
函数的查看与删除
查看函数的语法:
show create function 函数名;
删除函数的语法:
drop function 函数名;