美文网首页
MySQL自定义函数

MySQL自定义函数

作者: 老羊_肖恩 | 来源:发表于2023-01-05 23:15 被阅读0次

      MySQL除了内置了丰富的函数方便用户调用外,还支持用户进行自定义函数。自定义函数与存储过程类似,也是一组预先编译好的SQL语句的集合。但是自定义函数和存储过程还是有着较大的区别:存储过程可以没有返回值,或者有多个返回值,一般用来实现批量插入、批量更新等操作;自定义函数有且仅有一个返回值,因此适合用于处理数据后返回一个特定的结果。

    函数创建

      MySQL中自定义函数的语法如下所示:

    CREATE FUNCTION '函数名称'('参数1' '参数1类型', '参数2' '参数2类型', ... ) RETURNS '返回值类型'
    BEGIN
      DECLARE '变量名' '变量类型' default '变量默认值';
      SET '参数设置'; 
      'SQL语句';
      RETURN 返回值;
    END;
    

      我以Leetcode中的177. 第N高的薪水为例,演示一下自定义函数的创建。该题要求从下面这个表中查找出薪资排名第N的人的薪资:

    Create table If Not Exists Employee (Id int, Salary int)
    +-------------+------+
    | Column Name | Type |
    +-------------+------+
    | id          | int  |
    | salary      | int  |
    +-------------+------+
    

      下面是关于这题的一种解答,可以通过如下的自定义函数来实现:

    --创建一个函数返回排名第N的薪水
    CREATE FUNCTION getNthHighestSalary(--定义函数名称
        N INT                         --定义函数入参名称及类型
    ) RETURNS INT                     --定义函数返回值类型
    BEGIN                             -- 标识函数体开始
        DECLARE ans INT default NULL; --定义一个整型变量,用于保存最后的结果,默认为null 
        SET N = N - 1;                --设置参数值,将原值-1
        --SQL语句
        SELECT DISTINCT salary INTO ans--将SELECT的结果赋值给变量ans
        FROM Employee 
        ORDER BY salary DESC LIMIT N,1;
        RETURN ans;                   --返回函数结果
    END;                              -- 标识函数体结束
    

    函数调用

    select '函数名称'('参数列表')
    

      比如上面我们定义的求第N高薪水的函数的调用方式如下:

    select getNthHighestSalary(3)
    

    查看、删除

      查看和删除自定义函数的语法如下所示:

    show create function '函数名称'
    drop function '函数名称'
    

    相关文章

      网友评论

          本文标题:MySQL自定义函数

          本文链接:https://www.haomeiwen.com/subject/fyojcdtx.html