if判断语法
语法
IF 条件1 THEN
...
ELSEIF 条件2 THEN
...
ELSEIF 条件2 THEN
...
ELSE
...
END IF;
例子:通过定义份数变量 score 判定当前份数变量等级,大于85优秀,大于60及格,小于60不及格
-- 创建存储过程
CREATE PROCEDURE grade_level()
begin
declare score int default 58;
declare result varchar(10);
if score >= 85 then
set result := '优秀';
elseif score >= 60 then
set result := '及格';
else
set result := '不及格';
end if;
end;
-- 调用存储过程
call grade_level();
CASE语法
语法一
CASE case_value
WHEN when_value THEN ....
WHEN when_value THEN ....
ELSE ...
END CASE;
语法二
和语法一区别在于没有 case_value
CASE
WHEN when_value THEN ....
WHEN when_value THEN ....
ELSE ...
END CASE;
例子:输入月份返回季度
-- 创建存储过程
CREATE PROCEDURE month2quarterly(in month int , out result varchar(50))
BEGIN
CASE
WHEN month >= 1 and month <=3 THEN
set result := '季度一';
WHEN month >= 4 and month <=6 THEN
set result := '季度二';
WHEN month >= 7 and month <=9 THEN
set result := '季度三';
WHEN month >= 10 and month <=12 THEN
set result := '季度四';
ELSE
set result := '非法月份输入值!';
END CASE;
select @result;
END;
-- 调用存储过程
set @result := '';
call month2quarterly(1 , @result);
-- 查看执行结果
select @result;
WHILE循环
while循环是有条件的循环控制语句,满足条件后,再执行循环体中的SQL语句,具体语法如下:
-- 先判定条件,如果为true,则执行逻辑,否则不执行逻辑
while 条件 do
SQL逻辑
end while;
例子:计算1到n的累加值。
-- 创建存储过程
create procedure compute_add(in n int)
begin
-- 定义局部变量 存储累加值
declare total int default 0;
while n > 0 do
set total := total + n;
set n := n-1;
end while;
select total;
end;
-- 调用存储过程
call compute_add(8);
REPEAT 循环
repeat循环时有条件的循环控制语句,当满足条件的时候退出循环,具体语法如下:
-- 先执行一次逻辑,然后判定逻辑是否满足,如果满足,则退出,如果不满足,则继续下一次循环
repeat
SQL逻辑
until 条件
end repeat;
例子:计算1到n的累加值。
-- 创建存储过程
create procedure compute_add_repeat(in n int)
begin
declare total int default 0;
repeat
set total := total + n;
set n := n-1;
-- 注意这里的条件后面不需要加 ; 号
until n <= 0
end repeat;
select total;
end;
-- 调用存储过程
call compute_add_repeat(10);
LOOP循环
loop实现简单循环,如果不在SQL逻辑中退出循环条件,可以使用其来时间简单的死循环。loop可以配合一下两个语句使用:
- leave : 配合循环使用,退出循环。
- iterate:必须用在循环中,作用时跳过当前循环剩下的语句,直接进入下一次循环。
语法
[begin_label:] loop
SQL逻辑
end loop [end_label];
leave label; -- 退出指定标记的循环体;
iterate label; -- 直接进入下一次循环体
例子:计算1到n的累加值。
-- 定义存储过程
create procedure compute_loop_leave(in n int)
begin
-- 定义局部变量统计累加值
declare total int default 0;
-- 给loop循环定义标记 sun
sum:loop
set total := total + n;
set n := n - 1;
-- 判断是否达到跳出循环条件
if n <= 0 then
leave sum;
end if;
end loop sum;
-- 查询循环结果
select total;
end;
-- 调用存储过程
call compute_loop_leave(10);
例子二:计算1到n的偶数和;
-- 定义存储过程
create procedure compute_loop_iterate(in n int)
begin
-- 定义局部变量统计累加值
declare total int default 0;
-- 给loop循环定义标记 sun
sum:loop
if n % 2 = 1 then
set n := n-1;
iterate sum;
end if;
set total := total + n;
set n := n - 1;
-- 判断是否达到跳出循环条件
if n <= 0 then
leave sum;
end if;
end loop sum;
-- 查询循环结果
select total;
end;
-- 调用存储过程
call compute_loop_iterate(4);
注意:转载请携带文章源地址