1. 函数
| 函数:有且仅有1个返回值,适合做处理数据后返回一个结果 |
| 存储过程:可以有0个返回值,也可以有多个返回值,适合做批量插入、批量更新 |
| |
| 创建语法: |
| create FUNCTION 函数名(参数列表) returns 返回类型 |
| BEGIN |
| 函数体 |
| END |
| |
| 注意: |
| 1.参数列表 包含两部分 |
| 参数名,参数类型 |
| 2.函数体:肯定会有return语句,如果没有会报错 |
| 如果return语句没有放在函数体的最后也不报错,但不建议 |
| return 值; |
| 3.函数体中仅有一句话,则可以省略begin end |
| 4.使用delimiter语句设置结束标记 |
| |
| 调用语法: |
| # 意思是执行函数体的语句,并显示返回值 |
| select 函数名(参数列表); |
2. 案例演示
| 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.有参有返回 |
| 题:根据员工名,返回它的工资 |
| 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') $ |
| |
| 3. 根据部门名,返回该部门的平均工资 |
| delimiter $ |
| create FUNCTION myf3(departName varchar(20)) returns double |
| begin |
| declare c double default 0; |
| |
| select avg(e.salary) into c |
| from employees e, departments d |
| where e.department_id = d.department_id |
| and d.department_name = departName; |
| |
| return c; |
| end $ |
| |
| select myf3('IT') $ |
3. 查看函数
| show create FUNCTION 函数名; |
4. 删除函数
案例演示
| 方法1: |
| delimiter $ |
| create function fun3(num1 float, num2 float) returns FLOAT |
| BEGIN |
| declare result float; |
| set result = num1 + num2; |
| |
| return result; |
| end $ |
| |
| select fun3(1, 3) $ |
| |
| 方法2: |
| delimiter $ |
| create function fun4(num1 float, num2 float) returns FLOAT |
| BEGIN |
| set @result = num1 + num2; |
| |
| return @result; |
| end $ |
| |
| select fun4(1, 3) $ |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?