MySQL CREATE FUNCTION创建存储函数的用法(附带实例)
在 MySQL 中,创建存储函数使用的语句是 CREATE FUNCTION,基本语法格式如下:
2) func_name 表示存储函数的名称;
3) func_parameter 为存储函数的参数列表,参数列表形式如下:
4) RETURNS type 语句表示函数返回数据的类型;
5) characteristics 指定存储过程的特性,有以下取值:
6) routine_body 是 SQL 代码的内容,可以用 BEGIN…END 来表示 SQL 代码的开始和结束,或者用 RETURN 返回函数的结果。
【实例】创建存储函数,名称为 NameByZip,该函数返回 SELECT 语句的查询结果,数值类型为字符串型,代码如下:
注意,FUNCTION 中总是默认为 IN 参数。RETURNS 子句只能对 FUNCTION 做指定,对函数而言这是强制的,它用来指定函数的返回类型,而且函数体必须包含一个 RETURN value 语句。
CREATE FUNCTION func_name ( [func_parameter] ) RETURNS type [characteristic ...] routine_body1) CREATE FUNCTION 为用来创建存储函数的关键字;
2) func_name 表示存储函数的名称;
3) func_parameter 为存储函数的参数列表,参数列表形式如下:
[ IN | OUT | INOUT ] param_name type其中,IN 表示输入参数,OUT 表示输出参数,INOUT 表示既可以输入也可以输出;param_name 表示参数名称;type 表示参数的类型,该类型可以是 MySQL 数据库中的任意类型。
4) RETURNS type 语句表示函数返回数据的类型;
5) characteristics 指定存储过程的特性,有以下取值:
- LANGUAGE SQL:说明 routine_body 部分是由 SQL 语句组成的,当前系统支持的语言为 SQL。SQL 是 LANGUAGE 特性的唯一值。
- SQL SECURITY { DEFINER | INVOKER }:指明谁有权限来执行。DEFINER 表示只有定义者才能执行。INVOKER 表示拥有权限的调用者可以执行。默认情况下,系统指定为 DEFINER。
- COMMENT 'string':注释信息,可以用来描述存储过程或函数。
6) routine_body 是 SQL 代码的内容,可以用 BEGIN…END 来表示 SQL 代码的开始和结束,或者用 RETURN 返回函数的结果。
【实例】创建存储函数,名称为 NameByZip,该函数返回 SELECT 语句的查询结果,数值类型为字符串型,代码如下:
CREATE FUNCTION NameByZip () RETURNS CHAR(50) RETURN (SELECT s_name FROM suppliers WHERE s_call= '48075');创建一个存储函数 NameByZip,参数定义为空,返回一个 CHAR 类型的结果。代码的执行结果如下:
mysql> set global log_bin_trust_function_creators=TRUE; mysql> DELIMITER // mysql> CREATE FUNCTION NameByZip() -> RETURNS CHAR(50) -> RETURN (SELECT s_name FROM suppliers WHERE s_call= '48075'); -> // mysql> DELIMITER ;如果在存储函数中的 RETURN 语句返回一个类型不同于函数的 RETURNS 子句中指定类型的值,返回值将被强制为恰当的类型。比如,如果一个函数返回一个 ENUM 或 SET 值,但是 RETURN 语句返回一个整数,对于 SET 成员集相应的 ENUM 成员,从函数返回的值是字符串。
注意,FUNCTION 中总是默认为 IN 参数。RETURNS 子句只能对 FUNCTION 做指定,对函数而言这是强制的,它用来指定函数的返回类型,而且函数体必须包含一个 RETURN value 语句。