1

我有以下 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. 我正在使用一个循环,因为我还将在这些循环中做其他事情,但那是为了以后。我不是在寻找类似的解决方案,SELECT id, name FROM table1但我希望修复我的错误。所以我可以继续我的循环。

我得到的错误是:

1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'loop1: LOOP INSERT INTO TempTable (id, name) SELECT id, name FROM table1' 附近使用正确的语法

4

3 回答 3

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)”在循环中增加你的计数器

于 2012-09-27T18:40:29.347 回答
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();
于 2014-09-18T12:29:04.033 回答
2

您的代码中存在语法错误(LIMIT @skip这是动态 SQL,需要一些技巧才能使其工作),但不是在loop1: LOOP.

我的猜测是您正在尝试在复合语句(BEGIN... END)之外使用 LOOP ,例如存储过程,这是不可能的。你必须创建一个存储过程来做到这一点。

于 2012-09-27T18:44:13.207 回答