mysql之存储过程(二)(while循环、repeat循环、leave语句、loop循环、iterate语句)

WHILE循环

语法:

[begin_label:] WHILE  search_condition  DO 
   statement_list; 
  [begin_label];

语义:首先判断循环开始条件search_condition 是否为true,如果为true,则执行循环体中的语句statement_list。每执行完一次,都要重新判断条件search_condition是否为true。如果条件search_condition为false,则循环结束。因此,条件search_condition又是循环结束条件
本循环的特点:先判断,后执行

循环必须具备的:
1.条件
2.SQL语句体
3.程序体里面需要对条件中的变量进行处理变化:条件的变化(一定要有,否则死循环)

例8:创建过程,计算两个日期之间相差的年数

DELIMITER $$

CREATE  PROCEDURE age(
  IN start_date DATE,
  IN end_date DATE,  
  OUT years INTEGER)   
 BEGIN 
   DECLARE next_date DATE;
   SET years = 0;
   SET next_date = start_date + INTERVAL 1 YEAR;
   WHILE next_date < end_date DO
     SET years = years + 1;
     -- 循环计数器加1
     SET next_date = next_date + INTERVAL 1 YEAR;
   END WHILE;      
 END$$

DELIMITER ;
客户端调用:
SET @start = '1991-01-12';
SET @end = '1999-07-09';
CALL  age(@start,@end,@year);
SELECT @start,@end,@year;

在这里插入图片描述
While循环案例:
6.计算输入的任意两个数之间的连续和,例如:输入1,100过程实现将1+2+3+…+100的和输出到变量中

DROP PROCEDURE IF EXISTS yaoqiu6;
DELIMITER $$
CREATE PROCEDURE  yaoqiu6(IN a INT,IN b INT,OUT c INT)
BEGIN 
	CASE WHEN a<=b
	THEN 
		SET c=a;
		WHILE (a+1)<=b DO
			SET c=c+a+1;
			SET a=a+1;
		END WHILE;
	WHEN a>b THEN
	SELECT '输入错误!请重新输入!';
	END CASE;
END $$
DELIMITER ; 

CALL yaoqiu6(1,100,@f);
SELECT @f;

7.计算输入的任意两个数之间的偶数的和,且打印一共计算了多少次

DROP PROCEDURE IF EXISTS yaoqiu7;
DELIMITER $$
CREATE PROCEDURE  yaoqiu7(IN a INT,IN b INT,OUT c INT,OUT d INT )
BEGIN 
SET c=0;
SET d=-1;
	CASE WHEN a<=b
	THEN 
		WHILE a<
  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值