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
使用的参数:
- 函数名称:
它是调用存储函数的名称。名称不应与 native(built_in) 函数。为了将例程与特定的数据库函数名称显式关联,应将其指定为database_name.func_name 。 - func_parameter:
它是参数,其值被其体内的函数使用。您不能指定这些参数IN, OUT, INOUT 。括号内的参数声明作为func_parameter type提供。这里,type 代表一个有效的 Mysql 数据类型。 - 数据类型:
它是函数返回值的数据类型。 - 特征:
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 |