Mysql嵌套在存储过程中的while循环
目前,我正在处理一个存储过程,其中我在另一个while循环下使用一个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
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 ;