我有以下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;
Run Code Online (Sandbox Code Playgroud)
此脚本无效,但应选择所有ID和名称table1.我正在使用一个循环,因为我也会在这些循环中做其他的东西,但这是为了以后.我不是在寻找类似的解决方案,SELECT id, name FROM table1但我希望我的错误得到修复.所以我可以继续我的循环.
我得到的错误是:
1064 - 您的SQL语法出错; 检查与MySQL服务器版本对应的手册,以便在'loop1:LOOP INSERT INTO TempTable(id,name)SELECT id,name FROM table1'在第1行附近使用正确的语法
尝试这样的循环语法:
DECLARE @count INT;
DECLARE @max INT;
SET @count=1;
SET @max= (SELECT COUNT(*) FROM table1);
WHILE(@count < @max)
BEGIN
/*your database query logic*/
END
Run Code Online (Sandbox Code Playgroud)
使用"SET @count =(@ count + 1)"在循环中递增计数器
小智 6
/* 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();
Run Code Online (Sandbox Code Playgroud)