🙏废话不多说系列,直接开整🙏
(1)if else 流程控制
-- 语法格式如下:
IF search_condition THEN
statement_list
[ELSEIF search_condition THEN]
statement_list ...
[ELSE
statement_list]
END IF
-- 示例:( 新建一个函数,用来测试 if elseif else)
drop function if exists func_ifelse_demo ;
create function func_ifelse_demo(`num` int) returns varchar(1000)
begin
# 判断成绩等级
declare info varchar(1000) default '';
set info = '';
if num >= 80 and num <= 100 then set info = '成绩优秀';
elseif num >= 60 and num < 80 then set info = '成绩及格';
elseif num >= 0 and num < 60 then set info = '成绩不及格';
else set info = '成绩异常';
end if;
return info;
end
select func_ifelse_demo(100); -- 成绩优秀
(2)while 循环
--- while 语法
WHILE [condition_statement] DO
[statement];
END WHILE;
-- 示例:while 循环测试
drop function if exists func_while_demo;
create function func_while_demo(`num` int) returns int
begin
# 累计求和 1+2+...+num
declare sum int default 0;
declare i int default 1;
while i<=num do
set sum = sum + i;
set i = i + 1;
end while;
return sum;
end
select func_while_demo(10); -- 55
(3)case when then
-- 存储过程 / 函数 中的 case 用法
CASE val
WHEN 1 THEN SELECT 'val is 1' ;
WHEN 2 THEN SELECT 'val is 2' ;
ELSE SELECT 'val is not 1 or 2 ' ;
END CASE;
-- 示例2:
drop function if exists func_case_demo;
create function func_case_demo(score int) returns char deterministic
begin
case
when score >= 90 and score <= 100 then return 'A';
when score >= 80 then return 'B';
when score >= 60 then return 'C';
else return 'D';
end case;
end
select func_case_demo(89);
-- 示例2:SQL中的直接查询替换值得用法
select
stu_id,
stu_name,
case
when stu_age < 50 then '< 50'
when stu_age = 50 then '= 50'
when stu_age > 50 then '> 50'
end stu_age
from student s ;
测试结果:
(4)Loop 循环
-- 语法格式:
[ loop_label: ] LOOP
statement_list ;
END LOOP [ loop label ]
-- 示例:新建一个函数,用来测试 loop 循环
drop function if exists func_loop_demo;
create function func_loop_demo(`num` int) returns int
begin
# 累计求和 1+2+...+num
declare id int default 1;
declare sum int default 0;
add_loop: loop
set sum = sum + id;
set id = id + 1;
if id > num then leave add_loop; # leave 关键字:指定此处离开此loop循环,配合loop使用。
end if;
end loop add_loop;
return sum;
end
select func_loop_demo(5); -- 10 = 1,2,3,4,5
(5)iterate 再次循环
-- iterate 语句:将执行顺序转到语句端的开头,语句的基本格式如下:
-- ITERATE label
-- iterate 只可以出现在 LOOP、REPEAT、WHILE 语句内。iterate 的意思为“再次循环”,label 参数标识循环的标识。
-- 示例:
drop procedure if exists proc_doIterate_demo;
create procedure proc_doIterate_demo()
begin
declare i int default 0;
my_loop: loop
set i = i + 1;
if i < 10 then iterate my_loop ;
elseif i > 20 then leave my_loop;
end if;
select 'i is between 10 and 20';
end loop my_loop;
end
-- 使用方法
call proc_doIterate_demo();
显示结果:
(6)repeat 语句
-- repeat 语句
-- repeat 语句创建一个待条件判断的循环过程,
-- 每次语句执行完毕之后,会对条件表达式进行判断,
-- 如果表达式为真,则循环结束;
-- 如果表达式为假,则重复执行循环中的语句。
-- 语法:
-- [ repeat_label: ] REPEAT
-- statement_list
-- UNTIL expr_condition
-- END REPEAT [ repeat_label ]
-- 示例:
drop function if exists func_repeat_demo;
create function func_repeat_demo(`num` int) returns int
begin
declare id int default 0;
declare sum int default 0;
repeat
set sum = sum + id;
set id = id + 1;
UNTIL id >= num
end repeat;
return sum;
end
select func_repeat_demo(30000); -- 449985000
测试结果:
(7)leave 语句
-- leave 语句
-- (1)leave 语句用来退出任何被标注的流程控制构造。
-- (2)leave 语句语法基本格式如下:
-- leave label -- label 参数标识循环的标志。leave 和 begin...end 或 循环一起被使用。
-- 示例
drop function if exists func_leave_demo;
create function func_leave_demo() returns int
begin
declare count int default 0;
add_num: loop
set count = count + 1;
if count = 50 then leave add_num ;
end if;
end loop add_num;
return count;
end
select func_leave_demo();
测试结果:
扩展
-- 显示所有的函数:
SHOW FUNCTION STATUS; -- 显示当前环境下的数据库的所有库的所有存储函数
-- 显示所有的存储过程:
SHOW PROCEDURE STATUS;
🙏至此,非常感谢阅读🙏