我有以下MySql脚本:
SET @skip = 0;
SET @max = (SELECT COUNT(*) FROM table1);
CREATE TEMPORARY TABLE TempTable(
id INT NOT NULL,
name VARCHAR(32) NOT NULL
);
loop1: LOOP
INSERT INTO TempTable (id, name) SELECT id, name FROM table1 LIMIT @skip, 1;
IF @skip < @max THEN
SET @skip = @skip + 1;
ITERATE loop1;
END IF;
LEAVE loop1;
END LOOP loop1;
SELECT * FROM TempTable;
此脚本不起作用,但应选择table1
中的所有ID和名称。我正在使用一个循环,因为我也会在这些循环中做其他的东西,但这是为了以后。
我不是在寻找像SELECT id, name FROM table1
这样的解决方案,但我想修复我的错误。所以我可以继续我的循环。
我得到的错误是:
1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以获得正确的语法 'loop1附近:LOOP INSERT INTO TempTable(id,name)SELECT id,name FROM table1'在第1行
答案 0 :(得分:6)
尝试这样的循环语法:
DECLARE @count INT;
DECLARE @max INT;
SET @count=1;
SET @max= (SELECT COUNT(*) FROM table1);
WHILE(@count < @max)
BEGIN
/*your database query logic*/
END
使用“SET @count =(@ count + 1)”在循环中增加计数器
答案 1 :(得分:5)
/* set delimiter */
DELIMITER $$
/* remove procedure if exists... */
DROP PROCEDURE IF EXISTS insert_it $$
/* create procedure */
CREATE PROCEDURE insert_it ()
BEGIN
DECLARE varcount INT DEFAULT 1;
DECLARE varmax INT DEFAULT 15;
WHILE varcount <= varmax DO
INSERT INTO yourtable(fixed_val, count_val) VALUES(3493, varcount);
SET varcount = varcount + 1;
END WHILE;
END $$
/* reset delimiter back to normal */
DELIMITER ;
/* call procedure */
CALL insert_it();
答案 2 :(得分:2)
你的代码中有 语法错误(LIMIT @skip
是动态SQL,需要一些技巧才能使其正常工作)但它不在loop1: LOOP
。< / p>
我的猜测是你试图在复合语句(BEGIN
... END
)之外使用LOOP,就像存储过程一样,这是不可能的。您必须创建一个存储过程来执行此操作。