我正在尝试编写一个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复杂的事情,而我的小知识可能比完全忘记更危险,所以让我知道我是否会以错误的方式解决这个问题(虽然我真的,真的不想要一个存储过程)。
答案 0 :(得分:3)
不幸的是,您不能在存储程序之外使用LOOP:存储过程,存储函数和触发器。
你有一些选择:
否则,如果您仍然不想创建存储过程,最好的办法是在shell,python等中编写一个小脚本来进行循环。
祝你好运!