MySQL支持自定义函数,定义好之后,调用方式与调用MySQL预定义的系统函数一样。

语法

  1. CREATE FUNCTION 函数名(参数名 参数类型,...)
  2. RETURNS 返回值类型
  3. [characteristics ...]
  4. BEGIN
  5. 函数体 #函数体中肯定有 RETURN 语句
  6. END

1、参数列表:指定参数为IN、OUT或INOUT只对PROCEDURE是合法的,FUNCTION中总是默认为IN参数。
2、RETURNS type 语句表示函数返回数据的类型;
RETURNS子句只能对FUNCTION做指定,对函数而言这是 强制 的。它用来指定函数的返回类型,而且函数体必须包含一个 RETURN value 语句。
3、characteristic 创建函数时指定的对函数的约束。取值与创建存储过程时相同,这里不再赘述。
4、函数体也可以用BEGIN…END来表示SQL代码的开始和结束。如果函数体只有一条语句,也可以省略BEGIN…END。

调用存储函数

  1. SELECT 函数名(实参列表)

代码举例

创建存储函数,名称为email_by_name(),参数定义为空,该函数查询Abel的email,并返回,数据类型为字符串型。

  1. DELIMITER //
  2. CREATE FUNCTION email_by_name()
  3. RETURNS VARCHAR(25)
  4. DETERMINISTIC
  5. CONTAINS SQL
  6. BEGIN
  7. RETURN (SELECT email FROM employees WHERE last_name = 'Abel');
  8. END //
  9. DELIMITER ;

创建存储函数,名称为email_by_id(),参数传入emp_id,该函数查询emp_id的email,并返回,数据类型为字符串型。

  1. DELIMITER //
  2. CREATE FUNCTION email_by_id(emp_id INT)
  3. RETURNS VARCHAR(25)
  4. DETERMINISTIC
  5. CONTAINS SQL
  6. BEGIN
  7. RETURN (SELECT email FROM employees WHERE employee_id = emp_id);
  8. END //
  9. DELIMITER ;
  1. SET @emp_id = 102;
  2. SELECT email_by_id(102);

存储过程和函数的查看、修改、删除

查看

  1. 使用SHOW CREATE语句查看存储过程和函数的创建信息
    SHOW CREATE {PROCEDURE | FUNCTION} 存储过程名或函数名
    
    SHOW CREATE FUNCTION test_db.CountProc \G
    
  2. 使用SHOW STATUS语句查看存储过程和函数的状态信息

    SHOW {PROCEDURE | FUNCTION} STATUS [LIKE 'pattern']
    

    这个语句返回子程序的特征,如数据库、名字、类型、创建者及创建和修改日期。

  3. 从information_schema.Routines表中查看存储过程和函数的信息
    MySQL中存储过程和函数的信息存储在information_schema数据库下的Routines表中。可以通过查询该表的记录来查询存储过程和函数的信息。其基本语法形式如下:

    SELECT * FROM information_schema.Routines
    WHERE ROUTINE_NAME='存储过程或函数的名' [AND ROUTINE_TYPE = {'PROCEDURE|FUNCTION'}];
    

    修改

    修改存储过程或函数,不影响存储过程或函数功能,只是修改相关特性。使用ALTER语句实现。

    ALTER {PROCEDURE | FUNCTION} 存储过程或函数的名 [characteristic ...]
    

    characteristic指定存储过程或函数的特性,其取值信息与创建存储过程、函数时的取值信息略有不同。

删除

DROP {PROCEDURE | FUNCTION} [IF EXISTS] 存储过程或函数的名