美文网首页MySQL
34-跳转语句-(LEAVE、ITERATE)

34-跳转语句-(LEAVE、ITERATE)

作者: 紫荆秋雪_文 | 来源:发表于2022-09-13 14:37 被阅读0次

一、跳转语句之-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;

相关文章

网友评论

    本文标题:34-跳转语句-(LEAVE、ITERATE)

    本文链接:https://www.haomeiwen.com/subject/ywqhortx.html