📜  MySQL WHILE 循环

📅  最后修改于: 2022-05-13 01:54:49.257000             🧑  作者: Mango

MySQL WHILE 循环

在此,我们将介绍 MySQL WHILE Loop 的概述,然后将介绍每个示例的算法,然后将看到每个示例的分析。让我们一一讨论。

介绍 :
MySQL WHILE 循环语句用于一次又一次地执行一个或多个语句,只要条件为真。当我们需要在条件为真时重复执行任务时,我们可以使用循环。
笔记 -
如果您不确定希望循环体执行的次数,请使用 WHILE LOOP 语句。由于 WHILE 条件在进入循环之前被评估,循环体可能不会执行一次。

句法 :

[label_name:] WHILE 
condition DO 
  statements_list
END WHILE [label_name]

语法标签含义 –

  • 标签名称 –
    标签名称 是可选的,它是与 WHILE 循环相关的名称。
  • 健康)状况 -
    健康)状况 每个都经过 WHILE 循环进行测试。如果条件结果为 TRUE,则执行 statements_list,或者如果条件结果为 FALSE,则终止 WHILE 循环。
  • Statements_list –
    Statements_list 是要执行的语句列表,可以承受 WHILE 循环。

While 循环框图:



WHILE 循环框图

MySQL WHILE 循环示例:

示例-1:
让我们使用 while 循环创建一个函数。

DELIMITER $$
CREATE FUNCTION GeekInc ( value INT )
RETURNS INT
BEGIN
  DECLARE inc INT;
  SET inc = 0;
  label: 
WHILE inc <= 30000 DO
    SET inc = inc + value;
  END 
WHILE label;
  RETURN inc;
END; $$
DELIMITER ;

分析 -

  • 值是 GeekInc函数的输入。
  • inc 已声明并设置为 0。
  • 当 inc 小于等于 3000 时,它会将 inc 设置为 inc + value。

要检查输出,请使用下面给出的以下命令。

CALL GeekInc(10000);

输出 -

0, 10000, 20000, 30000

示例 2 :
让我们使用 while 循环创建一个过程。

DELIMITER $$
CREATE procedure while_ex()
block: BEGIN
 declare value VARCHAR(20) default ' ' ;
 declare num INT default 0;
 SET num = 1;
 WHILE num <= 5 DO
   SET value = CONCAT(value, num ,',' );
   SET num = num + 1;
 END
 WHILE block;
 select value ;
END $$
DELIMITER ;

分析 -



  • 创建过程 while_ex 并声明 value 和 num。
  • 设置 num 为 1,而 num 等于或小于 5 do
  • 设置 value 等于 value 和 num 的串联。

要检查输出,请使用下面给出的以下命令。

call while_ex();

输出 -

value
1,2,3,4,5  

示例 3 :
让我们创建一个表“Test_Cal”,其日期如下。

CREATE TABLE Test_Cal(
   t_in INT AUTO_INCREMENT,
   fulldate DATE UNIQUE,
   day TINYINT NOT NULL,
   month TINYINT NOT NULL,
   PRIMARY KEY(id)
);

现在,创建一个存储过程以将数据插入表中,如下所示。

DELIMITER $$
CREATE PROCEDURE InsertCal(dt DATE)
BEGIN
   INSERT INTO Test_Cal(
       fulldate,
       day,
       month )
   VALUES(dt,  
       EXTRACT(DAY FROM dt),
       EXTRACT(MONTH FROM dt)
     );
END$$
DELIMITER ;

现在创建存储过程 LoadCal(),它将从开始日期开始的天数更新到表中。

DELIMITER $$
CREATE PROCEDURE LoadCal(
   startDate DATE,  
   day INT
)
BEGIN
      DECLARE counter INT DEFAULT 1;
   DECLARE dt DATE DEFAULT startDate;
   WHILE counter <= day DO
       CALL InsertCal(dt);
       SET counter = counter + 1;
       SET dt = DATE_ADD(dt,INTERVAL 1 day);
   END WHILE;
END$$
DELIMITER ;

分析 -

  • 存储过程 LoadCal() 有两个参数:startDate 和 day。
  • 首先,声明一个用于保存值的计数器和 dt 变量。
  • 然后,检查计数器是否小于或等于天,如果是:
  • 运行存储过程 Inertial() 以在 Test_Cal 表中插入一行。
  • 使用 DATE_ADD() 将计数器增加 1 会使 dt 增加 1 天。
  • WHILE 循环将日期插入表中,直到计数器与日期相同。

要检查输出,请使用下面给出的以下命令。

CALL LoadCal('2021-01-01',31);
select * from Test_Cal where tid < 10 ;

输出 -

t_idfulldatedaymonth
1 2021-01-0111
22021-01-0221
3 2021-01-0331
42021-01-0441
52021-01-0551
62021-01-0661
72021-01-0771
82021-01-0881
92021-01-0991