【数据库】SQL函数|变量

 🔥博客主页: 我要成为C++领域大神

🎥系列专栏【C++核心编程】 【计算机网络】 【Linux编程】 【操作系统】

❤️感谢大家点赞👍收藏⭐评论✍️

本博客致力于分享知识,欢迎大家共同学习和交流。

SQL函数

格式

create function 函数名(参数名 数据类型,参数名 数据类型,......)
returns 返回值类型
begin
函数语句1
函数语句2
.........
end

注意事项

SQL函数 函数体语句以;结尾,但是编译器会误认为这是函数的结尾,所以我们需要修改结束标记。
修改方式:delimiter 新的结束标记。
函数创建完成后,需要将结束标记修改回来。

#创建函数
drop function if exists myadd;
delimiter //
create function myadd(a int ,b int)
returns int
begin
declare c int default 0;
set c=a+b;
return c;
end //
delimiter ;   

调用函数

select myadd(3,5);

删除函数

drop function if exists 函数名;

函数如果存在则删除函数。若是没有if exists,函数不存在会执行失败。

变量

局部变量

函数内的变量,生命周期是函数开始到函数结束

会话变量

语法:@变量名;

set @a=10;
select @a;

生命周期:开始一次会话后,到会话结束。

不仅可以在设置会话变量的sql文件内查看变量的值,在其他sql文件内也可以查看。


结束会话后再次查看试试:
 


可以发现,变量的值是空。说明其生命周期在会话开始到结束。

系统变量

系统变量也叫做全局变量,包含数据库提前配置的系统参数。
查看系统变量的方式:show global variables;
 


不要轻易修改系统变量,否则可能会引起程序崩溃。

判断语句

if判断

语法:
if(表达式) then 执行语句1;执行语句2;执行语句3;
elseif (表达式) then 执行语句1;执行语句2;执行语句3;
else 执行语句;
end if;

例如:使用if判断创建一个函数,判断输入的值是正数、负数还是零。

drop function if exists myfun;
delimiter //
create function myfun(n int)
returns varchar(45)
begin
declare res varchar(45) default '';
if(n>0) then set res ='正数';
elseif(n=0) then set res='零';
else set res='负数';
end if;
return res;
end //
delimiter ;

case选择判断

语法:
1、

case 变量 when 值1 then 执行语句1;执行语句2;

when 值2 then 执行语句1;执行语句2;

when 值3 then 执行语句1;执行语句2:

end case;

2、

case when 表达式1 theni执行语句;

when 表达式2 then 执行语句;

when 表达式i then 执行语句;

同样的,用case选择创建一个函数,判断一个数是否是负数

drop function if exists myfun;
delimiter //
create function myfun(n int)
returns varchar(45)
begin
declare res varchar(45) default '';

case   when (n>0) then set res ='正数';
	   when (n=0) then set res='零';
	   when (n<0) then set res='负数';
end case;
return res;
end //
delimiter ;

循环

循环:while循环

语法:

while 条件

do

end while;

例:编写一个循环函数,计算1+2+3+...+n

drop function if exists mysum;
delimiter //
create function mysum(n int)
returns int
begin
declare nSum int default 0;
declare i int default 1;
while i<=10
do
set nSum=nSum+i;
set i=i+1;
end while;
return nSum;
end //
delimiter ;

select mysum(10);

其他循环:没有for循环,有loop和repeat循环

  • 14
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值