📜  MySQL |创建存储函数

📅  最后修改于: 2021-09-09 10:39:55             🧑  作者: Mango

CREATE FUNCTION语句用于创建存储函数和用户定义函数。存储函数是一组执行某些操作并返回单个值的 SQL 语句。

就像 Mysql 内置函数,它可以从 Mysql 语句中调用。

默认情况下,存储的函数与默认数据库相关联。

CREATE FUNCTION语句需要CREATE ROUTINE数据库权限。

句法:
Mysql 中CREATE FUNCTION语句的语法是:

CREATE FUNCTION function_name(func_parameter1, func_parameter2, ..)
          RETURN datatype [characteristics]
          func_body

使用的参数:

  1. 函数名称:
    它是调用存储函数的名称。名称不应与 native(built_in) 函数。为了将例程与特定的数据库函数名称显式关联,应将其指定为database_name.func_name
  2. func_parameter:
    它是参数,其值被其体内的函数使用。您不能指定这些参数IN, OUT, INOUT 。括号内的参数声明作为func_parameter type提供。这里,type 代表一个有效的 Mysql 数据类型。
  3. 数据类型:
    它是函数返回值的数据类型。
  4. 特征:
    CREATE FUNCTION 语句仅在其声明中指定了至少一个特性 { DETERMINISTIC, NO SQL, or READS SQL DATA } 时才被接受。

func_body是执行操作的 Mysql 语句集。它的结构如下:

BEGIN

        Mysql Statements

        RETURN expression;
END

函数体必须包含一个 RETURN 语句。

例子:

考虑以下员工表-

emp_id fname lname start_date
1 Michael Smith 2001-06-22
2 Susan Barker 2002-09-12
3 Robert Tvler 2000-02-09
4 Susan Hawthorne 2002-04-24

我们必须找到员工在公司工作的年数-

DELIMITER //

CREATE FUNCTION no_of_years(date1 date) RETURNS int DETERMINISTIC
BEGIN
 DECLARE date2 DATE;
  Select current_date()into date2;
  RETURN year(date2)-year(date1);
END 

//

DELIMITER ;

调用上述函数:

Select emp_id, fname, lname, no_of_years(start_date) as 'years' from employee;

输出:

emp_id fname lname years
1 Michael Smith 18
2 Susan Barker 17
3 Robert Tvler 19
4 Susan Hawthorne 17