1、创建自定义函数语法:
create function 函数名(参数1,参数2,...) returns 返回值数据类型 begin 函数体 return 语句; end;
要注意:
1)、自定义函数是数据库的对象,创建时,需要指定该函数属于哪个数据库;
2)、同一个数据库内,自定义函数不能和已有的函数名重名;
3)、函数必须指定返回值数据类型,且与return语句返回值类型相匹配;
2、函数创建和调用:
1)无参函数类型:
创建函数:行号自动加一;
#无参类型 create function row_no_fn() returns int begin 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)、声明变量名或参数名不能和表明或字段名重名;
3、函数维护:
查看函数:
1)查看当前数据库中所有自定义函数信息:
show function status\G show 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;
标签:function,12,函数,自定义,no,fn,name From: https://www.cnblogs.com/xuan01/p/17441561.html