2014-07-20 2 views
0

테이블에 30 개 (또는 그 이상)의 삽입을 실행하기 위해 MySQL에 프로 시저를 작성하려고합니다. 테이블에는 ID 등과 같은 다른 필드가 있지만 ID 필드는 auto_increment 필드이고 다른 필드는 중요하지 않습니다.여러 행을 삽입하는 MySQL 프로 시저

이것은 내가 지금까지 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은 오류 1064를 반환 "7 행에 구문 오류는 수동 확인". 7 번째 줄은 WHILE으로 시작하는 줄입니다.

나는이 INSERT 문을 시도 :

INSERT INTO account (login, password) 
VALUES (concat('test', i), '*00A51F3F48415C7D4E8908980D443C29C69B60C9'); 

그러나 운이없는

는, MySQL은 같은 오류를 다시 제공합니다.

내가 누락 된 자료가 있습니까? 아니면 이것은 성취 될 수없는 것입니까?

미리 감사드립니다.

답변

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; 
관련 문제