【MySQL】存储函数

一、介绍

存储函数是有返回值的存储过程,存储函数的参数只能是IN类型的。

也就是说对于存储函数来说,我们要去定义一个存储函数,必须要指定返回值,而且它的参数列表中所有的参数必须是输入类型in类型的,不能是out类型,当然,不写也是in类型。

具体语法如下:

CREATE FUNCTION 存储函数名称 ([ 参数列表 ])
RETURNS type [characteristic ...] -- characteristic:可选参数,指代的是当前存储参数它的特性
BEGIN
	-- SQL语句
	RETURN ...;
END ;

characteristic说明:

  • DETERMINISTIC:相同的输入参数总是产生相同的结果
  • NO SQL :不包含 SQL 语句。
  • READS SQL DATA:包含读取数据的语句,但不包含写入数据的语句。

二、案例

计算从1累加到n的值,n为传入的参数值。

create function fun1(n int) -- 参数类型可以不用写,因为默认就是in,而且这一块类型只能是in
returns int deterministic
begin
   declare total int default 0;
   
   while n>0 do
       set total := total + n;
       set n := n - 1;
   end while;
   
   return total;
end;

-- 调用fun1函数,并且将函数的返回值查询展示出来
select fun1(50);

在mysql8.0版本中binlog默认是开启的,一旦开启了,mysql就要求在定义存储函数时,需要指定 characteristic特性,否则就会报如下错误:

image-20240720122817012

并且可以发现,存储过程显示的是p,而存储函数显示的是f

image-20240720164134306


但是存储函数我们相对用的比较少一些,因为存储函数能做的事情,存储过程也能做到;而且存储函数还有一个弊端,它必须得有返回值。那么大家想,假如说我要去执行一段逻辑,而这段逻辑有返回值,也是可以使用存储过程写的,因为存储过程我们可以指定参数的类型为out,就可以接收存储过程执行的结果。

所以能够使用存储函数的地方,也可以使用存储过程替代。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值