P89 跳转语句leave和iterate的使用

本文介绍了MySQL中用于流程控制的跳转语句LEAVE和ITERATE。通过示例详细阐述了如何在存储过程中使用LEAVE退出BEGIN...END结构,以及在WHILE循环中利用ITERATE进行循环迭代。示例涵盖了根据条件判断执行不同查询以及在满足特定条件时修改员工薪资的场景。同时,展示了ITERATE在循环结构中的应用,演示了如何在循环体内根据条件控制循环的执行。
摘要由CSDN通过智能技术生成

4.6跳转语句之leave

#5.1 leave的使用

/*
举例1:创建存储过程 “leave_begin()”,声明INT类型的IN参数num。
给BEGIN...END加标记名,并在BEGIN...END中使用IF语句判断num参数的值。
如果num<=0,则使用LEAVE语句退出BEGIN...END;
如果num=1,则查询“employees”表的平均薪资;
如果num=2,则查询“employees”表的最低薪资;
如果num>2,则查询“employees”表的最高薪资。
IF语句结束后查询“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 employees;
	ELSEIF num=2
		THEN SELECT MIN(salary) FROM employees;
	ELSE
		SELECT MAX(salary) FROM employees;
	END IF;
	
	#查询总人数
	SELECT COUNT(*) FROM employees;
END//

DELIMITER ;

#调用
CALL leave_begin(0);
CALL leave_begin(1);

#举例2:当市场环境不好时,公司为了渡过难关,决定暂时降低大家的薪资。
#声明存储过程“leave_while()”,声明OUT参数num,输出循环次数,
#存储过程中使用WHILE循环给大家降低薪资为原来薪资的90%,
#直到全公司的平均薪资小于等于10000,并统计循环次数。

DELIMITER//

CREATE PROCEDURE leave_while(OUT num INT)

BEGIN
	#
	DECLARE avg_sal DOUBLE;#记录平均工资
	DECLARE while_count INT DEFAULT 0;#记录循环次数
	
	SELECT AVG(salary)INTO avg_sal FROM employees;#①初始化条件
	
	while_label:WHILE TRUE DO #②循环条件
		#③循环体
		IF avg_sal<=10000 THEN
			LEAVE while_label;
		END IF;
		
		UPDATE  employees SET salary=salary*0.9;
		SET while_count=while_count+1;
		
		#④迭代条件
		SELECT AVG(salary)INTO avg_sal FROM employees;
	
	END WHILE;
	
	#赋值
	SET num=while_count;
END//

DELIMITER;

#调用
CALL leave_while(@num);
SELECT @num;

SELECT AVG(salary)FROM employees;

4.7跳转语句之iterate

#5.2 iterate的使用

/*
 定义局部变量num,初始值为0。循环结构中执行num + 1操作。
如果num < 10,则继续执行循环;
如果num > 15,则退出循环结构;

*/

DELIMITER //

CREATE PROCEDURE test_iterate()

BEGIN
	DECLARE num INT DEFAULT 0;
	
	loop_label:LOOP
		#赋值操作
		SET num=num+1;
		
		IF num<10
			THEN ITERATE loop_label;
		ELSEIF num>15
			THEN LEAVE loop_label;
		END IF;
		
		SELECT '尚硅谷';
	END LOOP;
END//
DELIMITER;

#调用
CALL test_iterate();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值