MySQL | 自定义函数

一、是什么

用户自己定义函数

由于设计函数的每一条指令都是一个独立的个体,因此需要语句结束符,因为函数是一个整体,且不能被中断。MySQL 一旦见到语句结束符就会自动开始执行

解决方案

在定义函数之前,修改临时的语句结束符 ;

在 MySQL 中使用 delimiter 来修改临时语句结束符。默认情况下,delimiter是分号 ; 在命令行客户端中,如果有一行命令以分号结束,那么回车后,mysql将会执行该命令。

语法:

delimiter 新符号  //使用系统非内置的符号,如 $$
正常 SQL指令      //此时语句后有 ; 也不会执行
使用新符号结束
delimiter ;      //将语句结束符改为 ;

二、创建函数

自定义函数包含这几个要素

  • function 关键字
  • 函数名
  • 参数(可以为空)
  • 函数体
  • 返回值

语法:

delimiter 新符号
create function 函数名(形参) returns 返回值类型
begin
    函数体
    return 返回值数据   //数据必须与结构中定义的返回值类型一致
end
新符号           //用于结束语句
delimiter ;     //将结束符重新改为 ;
1.创建无参函数

可以看到,如果不修改语句结束符,当遇到 ; 时就会结束语句

我们修改语句结束符,此时函数中的语句当见到符号 ; 时不会自动执行了。当然别忘了还要将结束符号重新变为 ;

PS

如果函数本身只有一条指令 return,此时我们可以省略 begin 和 return,甚至连 delimiter 都不需要用到

2.创建有参函数

如果函数包含形参

语法:注意形参的位置是变量名字在前面,这和我们使用其他语言不一样

delimiter 新符号
create function 函数名(变量名 变量类型) returns 返回值类型
begin
    函数体
    return 返回值数据   //数据必须与结构中定义的返回值类型一致
end
新符号           //用于结束语句
delimiter ;     //将结束符重新改为 ;

创建形参是 int 类型的 a 和 b 的函数


三、查看函数

1.可以查看函数的状态,查看所有的函数

语法:show function status;

也可以使用通配符来查找指定名字的函数,这里我找的是刚才创建的函数

2.查看函数的创建语句

语法:show create function 函数名

同样查找刚才创建的函数


四、调用函数

自定义函数调用的方式和系统内置函数调用的方式一致

语法:select 函数名(实参列表)


五、删除函数

语法:drop function 函数名


六、注意事项

  1. 自定义函数是属于用户级别的,只有当前客户端对应的数据库中才可以使用。
  2. 可以在不同的数据库下看到对应的函数,但是不能调用

  1. 函数因为必须规范返回值,在函数内部不能使用 select 指令,因为该指令一旦执行会得到一个结果集,这是不允许的

猜你喜欢

转载自blog.csdn.net/babycan5/article/details/82789907