Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MySQL语句中使用嵌套循环和变量_Mysql_Variables_Loops - Fatal编程技术网

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

如何在MySQL语句中使用嵌套循环和变量,mysql,variables,loops,Mysql,Variables,Loops,我试图编写一个sql语句,在给定一些设置变量的情况下插入数据。我不想创建存储过程,因为除了作为管理员之外,我不会在任何地方处理它,我也不希望存储过程挂起。我只想要一个有效的声明。以下是我目前掌握的情况: SET @app = 7; SET @time = UNIX_TIMESTAMP(NOW()); SET @maxValue = 100; SET @decrement = 10; SET @category = 1; SET @minSubcategory = 0; SET @maxSubca

我试图编写一个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
。我做错了什么


请注意,这可能是我第一次尝试用MySQL做这么复杂的事情,我的一点知识可能比完全忘记更危险,所以请让我知道我是否完全走错了路(尽管我真的,真的不想为此使用存储过程).

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

您确实有一些选择:

  • 您可以创建存储过程并限制权限,以便其他用户无法执行它
  • 另一个选项是在脚本中临时创建一个存储过程,运行它,然后将其放在脚本末尾
  • 否则,如果您仍然不想创建存储过程,最好用shell、python等编写一个小脚本来执行循环


    祝你好运

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

    您确实有一些选择:

  • 您可以创建存储过程并限制权限,以便其他用户无法执行它
  • 另一个选项是在脚本中临时创建一个存储过程,运行它,然后将其放在脚本末尾
  • 否则,如果您仍然不想创建存储过程,最好用shell、python等编写一个小脚本来执行循环


    祝你好运

    谢谢,我很害怕。谢谢,我很害怕。