代码之家  ›  专栏  ›  技术社区  ›  Ed Marty

如何在MySQL语句中使用嵌套循环和变量

  •  0
  • Ed Marty  · 技术社区  · 14 年前

    我试图编写一个sql语句,在给定几个设置变量的情况下插入数据。我不想创建一个存储过程,因为除了作为管理员之外,我在任何地方都不会处理它,我也不想让这个存储过程一直存在。我只想要一份有效的声明。以下是我目前掌握的情况:

    SET @app = 7;
    SET @time = UNIX_TIMESTAMP(NOW());
    SET @maxValue = 100;
    SET @decrement = 10;
    SET @category = 1;
    SET @minSubcategory = 0;
    SET @maxSubcategory = 19;
    SET @subcategory = @minSubcategory;
    subcat_loop: LOOP
      SET @idx = 0;
      insert_loop: LOOP
        SET @id = CONCAT('TempId', @idx+1);
        SELECT @name:=username FROM user WHERE id = @id;
        SET @value = @maxValue - @decrement * @idx;
        INSERT INTO data (userId, username, app, category, subcategory, value, date) VALUES
          (@id,  @name, @app, @category, @subcategory, @value, @time);
        SET @idx = @idx+ 1;
        IF @idx > 10 THEN
          LEAVE insert_loop;
        END IF;
      END LOOP insert_loop;
      SET @subcategory = @subcategory + 1;
      IF @subcategory > @maxSubcategory THEN
        LEAVE subcat_loop;
      END IF;
    END LOOP subcat_loop;
    

    但它不喜欢 SET @idx = 0 因为某种原因在循环中。我做错什么了?

    1 回复  |  直到 11 年前
        1
  •  3
  •   Ike Walker    14 年前

    不幸的是,不能在存储程序之外使用循环:存储过程、存储函数和触发器。

    你确实有一些选择:

    1. 您可以创建存储过程并限制权限,以便其他用户无法执行它。
    2. 另一个选项是在脚本中临时创建一个存储过程,运行它,然后在脚本结束时将其删除。

    祝你好运!