我正在尝试在MySQL中编写一个过程来执行30(或更多)插入到表中。该表包含其他字段ID
等,但ID
是auto_increment
字段,其他字段不重要。
这是我到目前为止看other StackOverflow questions:
的地方DROP PROCEDURE IF EXISTS test;
DELIMITER #
CREATE PROCEDURE test()
BEGIN
DECLARE i INT UNSIGNED DEFAULT 1;
WHILE i < 30
INSERT INTO account (login, password)
SELECT concat('test', i), '*00A51F3F48415C7D4E8908980D443C29C69B60C9';
SET i = i + 1;
END WHILE;
COMMIT;
END #
DELIMITER;
CALL test();
但MySQL在第7行返回错误1064“语法错误,请查看您的手册”。第7行是以WHILE
开头的那个。
我也试过这个INSERT
声明:
INSERT INTO account (login, password)
VALUES (concat('test', i), '*00A51F3F48415C7D4E8908980D443C29C69B60C9');
但没有任何运气,MySQL会回复同样的错误。
有什么我想念的吗?或者这是无法完成的事情?
提前致谢。
答案 0 :(得分:3)
缺少关键字DO:
WHILE Syntax
[begin_label:] WHILE search_condition DO
statement_list
END WHILE [end_label]
所以你的SQL应该是:
DROP PROCEDURE IF EXISTS test;
DELIMITER #
CREATE PROCEDURE test()
BEGIN
DECLARE i INT UNSIGNED DEFAULT 1;
-- next line needs a DO at the end
WHILE i < 30 DO
INSERT INTO account (login, password)
SELECT concat('test', i), '*00A51F3F48415C7D4E8908980D443C29C69B60C9';
SET i = i + 1;
END WHILE;
COMMIT;
END #
DELIMITER;