首页 > 解决方案 > MySql程序,重复50次,生成随机值,检查是否存在

问题描述

我正在尝试在 mysql 中执行存储过程,但我经常遇到语法错误。将不胜感激任何帮助。谢谢你。代码在这里:

BEGIN
    /* loop to get 50 locations,
       while loop to check if generated location is already in db
       if in DB, generate again, else move on*/
    SET @i = 0;
    REPEAT
        BEGIN
            DECLARE RandomDesertCount INT DEFAULT 1;
            DECLARE RandomDesertX INT;
            DECLARE RandomDesertY INT;

            DECLARE RandomJungleCount INT DEFAULT 1;
            DECLARE RandomJungleX INT;
            DECLARE RandomJungleY INT;

            WHILE RandomDesertCount > 0 DO
                    SET RandomDesertX = RAND() * (200) - 100;
                    SET RandomDesertY = RAND() * (200) - 100;
                    SET RandomDesertCount = SELECT COUNT(*) FROM locations where x = RandomDesertX AND y = RandomDesertY;
                END WHILE;

            WHILE RandomJungleCount > 0 DO
                    SET RandomJungleX = RAND() * (200) - 100;
                    SET RandomJungleY = RAND() * (200) - 100;
                    SET RandomJungleCount = SELECT COUNT(*) FROM locations where x = RandomJungleX AND y = RandomJungleY;
                END WHILE;

            INSERT INTO locations (x, y, type) VALUES (RandomDesertX, RandomDesertY, 'DESERT');
            INSERT INTO locations (x, y, type) VALUES (RandomJungleX, RandomJungleY, 'JUNGLE');

        END;
    UNTIL @i = 49
        END REPEAT;
END; ```

标签: mysqlloopsstored-procedures

解决方案


Set = select ... 无效 将 select 括在括号中

设置=(选择...)如

SET RandomDesertCount = (SELECT COUNT(*) FROM locations where x = RandomDesertX AND y = RandomDesertY);

SET RandomJungleCount = (SELECT COUNT(*) FROM locations where x = RandomJungleX AND y = RandomJungleY);

推荐阅读