一、跳转语句之-LEAVE语句
LEAVE语句:可以用在循环语句内,或者以
BEGIN 和 END
包裹起来的程序体内,表示跳出循环或者跳出程序体的操作。如果你有面向过程的编程语言的使用经验,可以把 LEAVE 理解为 break
- 基本格式
LEAVE 标记名
1、实战1
创建存储过程 “leave_begin()”,声明INT类型的IN参数num。给BEGIN...END加标记名,并在
BEGIN...END中使用IF语句判断num参数的值
1>如果num<=0,则使用LEAVE语句退出BEGIN...END;
2>如果num=1,则查询“employees”表的平均薪资;
3>如果num=2,则查询“employees”表的最低薪资;
4>如果num>2,则查询“employees”表的最高薪资。
- 代码
DELIMITER $
CREATE PROCEDURE leave_begin(IN num INT)
begin_label:
BEGIN
IF num <= 0 THEN
LEAVE begin_label;
ELSEIF num = 1 THEN
SELECT AVG(salary) FROM emp;
ELSEIF num = 2 THEN
SELECT MIN(salary) FROM emp;
ELSE
SELECT MAX(salary) FROM emp;
END IF;
END $
DELIMITER ;
- 调用
CALL leave_begin(5);
CALL leave_begin(2);
CALL leave_begin(1);
CALL leave_begin(0);
2、实战2
当市场环境不好时,公司为了渡过难关,决定暂时降低大家的薪资。声明存储过程“leave_while()”,声明
OUT参数num,输出循环次数,存储过程中使用WHILE循环给大家降低薪资为原来薪资的90%,直到全公
司的平均薪资小于等于10000,并统计循环次数
- 代码
DELIMITER $
CREATE PROCEDURE leave_while2(OUT num INT)
BEGIN
DECLARE while_count INT DEFAULT 0;
DECLARE avg_salary DOUBLE DEFAULT 0;
while_label:
WHILE TRUE
DO
#计算平均工资
SELECT AVG(salary) INTO avg_salary FROM emp;
IF avg_salary <= 10000 THEN
LEAVE while_label;
END IF;
# 累计加1
SET while_count = while_count + 1;
# 更新工资
UPDATE emp SET salary = salary * 0.9;
END WHILE;
SET num = while_count;
END $
DELIMITER ;
- 定义变量
SET @num = 0;
- 调用
CALL leave_while2(@num);
- 输出变量
SELECT @num;
二、跳转语句之ITERATE语句
ITERATE语句
:只能用在循环语句(LOOP、REPEAT和WHILE语句)内,表示重新开始循环,将执行顺序转到语句段开头处。可以把 ITERATE 理解为 CONTINUE,意思为再次循环
- 语法格式
ITERATE label
1、实战
定义局部变量num,初始值为0。循环结构中执行num + 1操作
1、如果num < 10,则继续执行循环;
2、如果num > 15,则退出循环结构;
- 代码
DELIMITER $
CREATE PROCEDURE iterate_test(OUT sum INT)
BEGIN
DECLARE num INT DEFAULT 0;
DECLARE des VARCHAR(500) DEFAULT '';
iterate_loop:
LOOP
SET num = num + 1;
IF num < 10 THEN
ITERATE iterate_loop;
ELSEIF num > 15 THEN
LEAVE iterate_loop;
ELSE
SET des = des + num;
END IF;
END LOOP iterate_loop;
SET sum = num;
SELECT des;
END $
DELIMITER ;
- 定义变量
SET @sum = 0;
- 调用
CALL iterate_test(@sum);
- 输出变量
SELECT @sum;
网友评论