随笔 - 1162  文章 - 0  评论 - 16  阅读 - 59万 

一、函数

  1、概念

    一组预先编译好的SQL语句的集合,理解成批处理语句。

  2、好处

    (1)提高代码的重用性;
    (2)简化操作;
    (3)减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率;

  3、与存储过程的区别

    存储过程:可以有0个返回值,也可以有个返回值,适合做批量插入、批量更新;

    函数:有且仅有1个返回,适合做处理数据后返回一个结果;

二、语法

  1、创建语法

1
2
3
4
CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型
BEGIN
    函数体
END

    注意:

    (1)参数列表,包含两部分:参数名  参数类型

    (2)函数体:肯定会有 return 语句,如果没有会报错,如果return语句没有放在函数体的最后也不报错,但不建议;

      所以建议把 return 返回值放在最后;

    (3)函数体中仅有一句话,则可以省略 begin end;

    (4)使用 delimiter 语句设置结束标记

 

  2、调用语法

1
SELECT 函数名(参数列表)

  

  3、修改存储过程

1
alter function 函数名 [charactristic…]

    

1
2
3
4
characteristic:
{contains sql|no sql|reads sql data|modifies sql data}
|sql security{definer|invoker}
|comment ‘string’

 

  4、查看函数

    (1)查看函数的状态

1
show {procedure | function} status like 存储过程或函数名;

  

    (2)查看函数的定义

1
SHOW CREATE FUNCTION 函数名;

  

    (3)通过查看 information_schema.routines 了解存储过程和函数的信息

1
select * from rountines where rounine_name =存储过程名|函数名

  

  5、删除函数

1
DROP FUNCTION 【if exists】 函数名;

    注意:一次只能删除一个存储过程或者函数,并且要求有该过程或函数的 alter routine 权限;

 

三、案例

  1、无参有返回值

    案例:返回公司的员工个数

1
2
3
4
5
6
7
8
9
10
11
12
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:

1
2
3
4
5
6
7
8
9
10
11
12
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('Kochar');

  

    案例2:根据部门名,返回该部门的平均工资

1
2
3
4
5
6
7
8
9
10
11
12
CREATE FUNCTION myf3(deptName VARCHAR(30)) RETURN DOUBLE
BEGIN
    DECLARE sal DOUBLE
    SELECT AVG(salary) INTO sal
    FROM employees e
    JOIN departments d ON e.department_id = d.department_id
    WHERE d.department_name = deptName
     
    RETURN sal;
END
 
SELECT myf3('IT');

 

  3、创建函数,实现传入两个 float,返回二者之和

1
2
3
4
5
6
7
8
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);

  

 

posted on   格物致知_Tony  阅读(46)  评论(0编辑  收藏  举报
编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· 面试官:你是如何进行SQL调优的?
点击右上角即可分享
微信分享提示

目录导航