Mysql嵌套在存储过程中的while循环

Mysql嵌套在存储过程中的while循环,mysql,stored-procedures,while-loop,Mysql,Stored Procedures,While Loop,目前,我正在处理一个存储过程,其中我在另一个while循环下使用一个while循环。但我没有得到预期的结果。最外层的循环是一次迭代 我正在尝试以下代码 DELIMITER $$ DROP PROCEDURE IF EXISTS `First_Sp` $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `First_Sp`() BEGIN DECLARE first_while_start INTEGER DEFAULT 1; DECLARE

目前,我正在处理一个存储过程,其中我在另一个while循环下使用一个while循环。但我没有得到预期的结果。最外层的循环是一次迭代

我正在尝试以下代码

DELIMITER $$

DROP PROCEDURE IF EXISTS `First_Sp` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `First_Sp`()
BEGIN

  DECLARE first_while_start  INTEGER DEFAULT 1;
  DECLARE second_while_start INTEGER DEFAULT 1;
  DECLARE first_while_count  INTEGER DEFAULT 3;
  DECLARE second_while_count INTEGER DEFAULT 3;

  WHILE first_while_start < first_while_count
  DO
    WHILE second_while_start < second_while_count
    DO
      SELECT concat(first_while_start,' - ',second_while_start) as result;
      SET second_while_start = second_while_start + 1;
    END WHILE;
    SET first_while_start = first_while_start + 1;
  END WHILE;
END $$

DELIMITER ;  
我还尝试了重复循环。但还是没有运气

DELIMITER $$

DROP PROCEDURE IF EXISTS `First_Sp` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `First_Sp`()
BEGIN

  DECLARE first_while_start  INTEGER DEFAULT 1;
  DECLARE second_while_start INTEGER DEFAULT 1;
  DECLARE first_while_count  INTEGER DEFAULT 3;
  DECLARE second_while_count INTEGER DEFAULT 3;

  REPEAT
    WHILE second_while_start < second_while_count
    DO
      SELECT concat(first_while_start,' - ',second_while_start) as result;
      SET second_while_start = second_while_start + 1;
    END WHILE;
    SET first_while_start = first_while_start + 1;
  UNTIL first_while_start < first_while_count
  END REPEAT;

END $$

DELIMITER ;
分隔符$$
如果存在“第一个Sp”,则删除过程$$
CREATE DEFINER=`root`@`localhost`过程`First\u Sp`()
开始
声明第一个\u,而\u开始整数默认为1;
声明第二个\u,而\u开始整数默认为1;
声明第一个\u,而\u计数整数默认为3;
声明第二个\u,而\u计数整数默认为3;
重复
WHILE second\u WHILE\u start

我不太喜欢SQL开发人员。我正在尝试。

这是因为在外部while循环的第一次迭代之后,
second\u while\u start
的值已经是
second\u while\u count
了,因此内部循环不再作为
second\u while\u start
执行

要获得“预期结果”,您需要在启动时重置第二个\u

DELIMITER $$

DROP PROCEDURE IF EXISTS `First_Sp` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `First_Sp`()
BEGIN

  DECLARE first_while_start  INTEGER DEFAULT 1;
  DECLARE second_while_start INTEGER DEFAULT 1;
  DECLARE first_while_count  INTEGER DEFAULT 3;
  DECLARE second_while_count INTEGER DEFAULT 3;

  WHILE first_while_start < first_while_count
  DO
    WHILE second_while_start < second_while_count
    DO
      SELECT concat(first_while_start,' - ',second_while_start) as result;
      SET second_while_start = second_while_start + 1;
    END WHILE;
    SET first_while_start = first_while_start + 1;
    /*here comes the important line:*/
    SET second_while_start = 1;
  END WHILE;
END $$

DELIMITER ;
分隔符$$
如果存在“第一个Sp”,则删除过程$$
CREATE DEFINER=`root`@`localhost`过程`First\u Sp`()
开始
声明第一个\u,而\u开始整数默认为1;
声明第二个\u,而\u开始整数默认为1;
声明第一个\u,而\u计数整数默认为3;
声明第二个\u,而\u计数整数默认为3;
WHILE first\u WHILE\u start
DELIMITER $$

DROP PROCEDURE IF EXISTS `First_Sp` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `First_Sp`()
BEGIN

  DECLARE first_while_start  INTEGER DEFAULT 1;
  DECLARE second_while_start INTEGER DEFAULT 1;
  DECLARE first_while_count  INTEGER DEFAULT 3;
  DECLARE second_while_count INTEGER DEFAULT 3;

  WHILE first_while_start < first_while_count
  DO
    WHILE second_while_start < second_while_count
    DO
      SELECT concat(first_while_start,' - ',second_while_start) as result;
      SET second_while_start = second_while_start + 1;
    END WHILE;
    SET first_while_start = first_while_start + 1;
    /*here comes the important line:*/
    SET second_while_start = 1;
  END WHILE;
END $$

DELIMITER ;