函数
函数定义:是一组预先编译好的sql语句的集合,理解成批处理语句 (和存储过程的定义相同)
好处:
- 提高了代码的重用性
- 简化操作
- 减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率
存储过程和函数的区别:
- 存储过程可以有0个返回;也可以有多个返回。(适合做批量的插入,批量更新)
- 函数有且仅有一个返回。(适合处理数据后返回一个结果。比如:查询一个值)
函数的创建
一: 创建语法
create function 函数名(参数列表) returns 返回类型
begin
函数体
end
注意1:参数类型包含:参数名 参数类型
注意2:在函数体中一定有return语句,如果没有则会报错。(return语句没有放在函数体的最后也不报错,但是不建议。)
注意3:当函数体中仅有一句话是,可以省略begin end
注意4:使用delimiter语句设计结束标记。
例如:delimiter $ //设置$为结束标记
delimiter ; / / 设 置 ; //设置 ;//设置; 为结束标记
函数的调用
二: 调用语法
select 函数名(参数列表)
案例演示:
注意:以下案例的结束标记都使用 $ 符号
1. 无参有返回
案例:返回公司的员工个数
/**创建**/
create function f() returns tinyint
begin
/**定义局部变量用于存储查询的员工个数**/
declare c tinyint default 0;
select count(*) into c
from employees;
return c;
end $
/**调用**/
select f()$
2. 有参有返回
案例:根据员工名返回它的工资
/**创建**/
create function f(name varchar(4)) returns double
begin
/**定义用户变量(当然也可以采用局部变量)**/
set @sal = 0;
select salary into @sal
from employees e
where e.last_name = name;
return @sal;
end $
/**调用**/
select f('k_ing')$
案例:根据部门名返回该部门的平均工资
/**创建**/
create function f(department_name varchar(8)) returns double
begin
set @sal = 0;
select avg(salary)into @sal
from employees e
join departments d
on d.department_id = e.department_id
where d.department_name = department_name;
return @sal;
end$
/**调用**/
select('IT')$
函数的查看
show create function 函数名;
函数的删除
drop function 函数名;
案例:创建函数,要求传入两个float数,返回两者之和
/**创建**/
create function f(num1 float, num2 float) returns float
begin
declare sum float default 0;
set sum = num1 + num2;
return sum;
end$
/**调用**/
select f(0.4,5.1)$