#mysql #sql #database #sql-insert
#mysql #sql #База данных #sql-вставка
Вопрос:
У меня есть этот код для вставки строк в таблицу. У меня есть три, пока они не были установлены сами по себе, но этот код дает мне
error #1064 - bad syntax close
BEGIN
WHILE p <= 5
BEGIN
WHILE ra <= 40
' on line 7.
Что не так с этим кодом?
DELIMITER $$
CREATE PROCEDURE proc()
BEGIN
DECLARE r int DEFAULT 1;
DECLARE p int DEFAULT 1;
DECLARE ra int DEFAULT 1;
WHILE r <= 8 DO
WHILE p <= 5 DO
WHILE ra <= 40 DO
INSERT INTO tabulka (REGAL,POLICE,RADA) VALUES(r,p,ra);
SET ra = ra 1;
END WHILE;
SET p = p 1;
END WHILE;
SET r = r 1;
END WHILE;
END$$
DELIMITER ;
CALL proc();
Ответ №1:
MySQL использует для этого синтаксис WHILE DO
/ END WHILE
. Итак, хранимая процедура должна выглядеть следующим образом:
CREATE PROCEDURE proc()
BEGIN
DECLARE r int DEFAULT 1;
DECLARE p int DEFAULT 1;
DECLARE ra int DEFAULT 1;
WHILE r <= 8 DO
WHILE p <= 5 DO
WHILE ra <= 40 DO
INSERT INTO tabulka (REGAL,POLICE,RADA) VALUES(r,p,ra);
SET ra = ra 1;
END WHILE;
SET p = p 1;
END WHILE;
SET r = r 1;
END WHILE;
END;
Вот небольшой рекстест.
Комментарии:
1. Спасибо, но теперь он генерирует только 40 строк с regal = 1, police = 1 и rada = 1 …. 40, но я хочу сгенерировать regal 1-8 и rada 1-5
2. @adam . . . Это ваш код с исправленными синтаксическими ошибками — это вопрос, который вы задали. Если у вас есть другой вопрос о логике , задайте его как новый вопрос. Тем не менее, я подозреваю, что ваша проблема заключается в том, что вы не повторно инициализируете переменную перед перезапуском каждого цикла.
Ответ №2:
Хорошо, моя ошибка. Я забыл сбросить переменные на 1 после завершения внутренних циклов. Спасибо за помощь.