MySQL支持自定义函数,定义好之后,调用方式与调用MySQL预定义的系统函数一样。
语法
CREATE FUNCTION 函数名(参数名 参数类型,...)RETURNS 返回值类型[characteristics ...]BEGIN函数体 #函数体中肯定有 RETURN 语句END
1、参数列表:指定参数为IN、OUT或INOUT只对PROCEDURE是合法的,FUNCTION中总是默认为IN参数。
2、RETURNS type 语句表示函数返回数据的类型;
RETURNS子句只能对FUNCTION做指定,对函数而言这是 强制 的。它用来指定函数的返回类型,而且函数体必须包含一个 RETURN value 语句。
3、characteristic 创建函数时指定的对函数的约束。取值与创建存储过程时相同,这里不再赘述。
4、函数体也可以用BEGIN…END来表示SQL代码的开始和结束。如果函数体只有一条语句,也可以省略BEGIN…END。
调用存储函数
SELECT 函数名(实参列表)
代码举例
创建存储函数,名称为email_by_name(),参数定义为空,该函数查询Abel的email,并返回,数据类型为字符串型。
DELIMITER //CREATE FUNCTION email_by_name()RETURNS VARCHAR(25)DETERMINISTICCONTAINS SQLBEGINRETURN (SELECT email FROM employees WHERE last_name = 'Abel');END //DELIMITER ;
创建存储函数,名称为email_by_id(),参数传入emp_id,该函数查询emp_id的email,并返回,数据类型为字符串型。
DELIMITER //CREATE FUNCTION email_by_id(emp_id INT)RETURNS VARCHAR(25)DETERMINISTICCONTAINS SQLBEGINRETURN (SELECT email FROM employees WHERE employee_id = emp_id);END //DELIMITER ;
SET @emp_id = 102;SELECT email_by_id(102);
存储过程和函数的查看、修改、删除
查看
- 使用SHOW CREATE语句查看存储过程和函数的创建信息
SHOW CREATE {PROCEDURE | FUNCTION} 存储过程名或函数名SHOW CREATE FUNCTION test_db.CountProc \G 使用SHOW STATUS语句查看存储过程和函数的状态信息
SHOW {PROCEDURE | FUNCTION} STATUS [LIKE 'pattern']这个语句返回子程序的特征,如数据库、名字、类型、创建者及创建和修改日期。
从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] 存储过程或函数的名
