【问题标题】:SQL - Triple nested while insertSQL - 插入时三重嵌套
【发布时间】:2019-03-23 11:25:40
【问题描述】:

我有此代码用于向表中插入行。我嵌套了三个,但是这段代码给了我

error #1064 - bad syntax  close

    BEGIN
            WHILE p <= 5
            BEGIN
                WHILE ra <= 40
            ' on line 7.

这段代码有什么问题?

 DELIMITER $$

CREATE PROCEDURE proc()
BEGIN
    DECLARE r int DEFAULT 1;
    DECLARE p int DEFAULT 1;
    DECLARE ra int DEFAULT 1;
    WHILE r <= 8 DO

        WHILE p <= 5 DO

            WHILE ra <= 40 DO

                INSERT INTO tabulka (REGAL,POLICE,RADA) VALUES(r,p,ra);
                SET ra = ra + 1;
            END WHILE;
            SET p = p + 1;
        END WHILE;
        SET r = r + 1;
    END WHILE;
END$$
DELIMITER ;

CALL proc();

编辑:现在它只生成一个循环:

【问题讨论】:

    标签: mysql sql database sql-insert


    【解决方案1】:

    MySQL 使用WHILE DO/END WHILE 作为它的语法。所以存储过程应该是这样的:

    CREATE PROCEDURE proc()
    BEGIN
        DECLARE r int DEFAULT 1;
        DECLARE p int DEFAULT 1;
        DECLARE ra int DEFAULT 1;
        WHILE r <= 8 DO
            WHILE p <= 5 DO
                WHILE ra <= 40 DO
                    INSERT INTO tabulka (REGAL,POLICE,RADA) VALUES(r,p,ra);
                    SET ra = ra + 1;
                END WHILE;
                SET p = p + 1;
            END WHILE;
            SET r = r + 1;
        END WHILE;
    END;
    

    这里有一点rextester

    【讨论】:

    • 谢谢,但现在它只生成 40 行,regal = 1,police = 1 和 rada = 1 .... 40,但我想生成 regal 1-8 和 rada 1-5
    • @adam 。 . .这是您修复了 syntax 错误的代码——这是您提出的问题。如果您对 逻辑 有其他问题,请将其作为新问题提出。也就是说,我怀疑您的问题是您在重新启动每个循环之前没有重新初始化变量。
    【解决方案2】:

    好吧,我错了。内部循环完成后,我忘记将变量重置为 1。感谢您的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-25
      相关资源
      最近更新 更多