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<