create function 函数名(参数1,参数2,...) returns 返回值数据类型begin 函数体 return 语句;end;
要注意:
1)、自定义函数是数据库的对象,创建时,需要指定该函数属于哪个数据库;
(资料图)
2)、同一个数据库内,自定义函数不能和已有的函数名重名;
3)、函数必须指定返回值数据类型,且与return语句返回值类型相匹配;
1)无参函数类型:
创建函数:行号自动加一;
#无参类型create function row_no_fn() returns intbegin set @row_no = @row_no + 1; return @row_no;end;
接着我们调用函数;
set @row_no = 0;select row_no_fn() 行号,student_name 姓名, student_no 学号 from student;
2)有参数类型:
创建函数:给定学号,给出姓名;
#有参数类型:create function get_name_fn(stu_no int) returns char(20)begin declare stu_name char(20); select student_name into stu_name from student where student_no = stu_no; return stu_name;end;
调用函数:
set @fn_no = "2023003";select get_name_fn("2023003"),get_name_fn(@fn_no);
要注意:
1)、先写参数名 再写参数类型,逗号隔开;
2)、在函数中,不允许出现有结果集产生的语句;所以使用select into语句,还要确保select 的结果集是单行的,赋值给单个变量;;
3)、声明变量名或参数名不能和表明或字段名重名;
查看函数:
1)查看当前数据库中所有自定义函数信息:
show function status\Gshow function status like "模式‘\G
此处的模式可以见下例:
show function status like "%\_fn"\G
2)查看指定数据库所有自定义函数名
select 自定义函数名 from mysql.proc where db="数据库名" and type = "function";
此处我们可以查看我们自定义的两个函数:
不过,貌似8.0版本之后的mysql 数据库下的proc表 被删除了???
通过查阅资料,我们发现可以从information_schema数据库下的 parameters表和 routines 表结合看;
可以查看information_schema数据库下的parameters表:通过specific_name = ’自定义函数名‘ :
select * from parameters where specific_name = "get_name_fn"\G
结合routines表,也是通过specific_name = ’自定义函数名‘;此表很详细了;
select * from routines where specific_name = "get_name_fn"\G
3)查看指定函数名的详细信息:
show create function 函数名\G
show create function get_name_fn\G
删除函数:
drop function 函数名
drop function row_no_fn;