Заполнение столбца генерированной информацией - MySQL
Формулировка задачи:
Хочу заполнить столбец случайными значениями. Создал процедуру, она работает:
Но нужно создать не одно значение а например несколько тысяч. Кладу код в цикл а он не работает, помогите разобраться в чем ошибка.
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET v1 = v1 - 1; END WHILE; END//' at line 10
Если убрать delimiter //
то показывает:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3
INSERT INTO curs1 SET goods = CASE CEILING(rand()*3) WHEN 1 THEN 'красный' WHEN 2 THEN 'зелёный' WHEN 3 THEN 'синий' END
delimiter // CREATE PROCEDURE dowhile() BEGIN DECLARE v1 INT DEFAULT 5; WHILE v1 > 0 DO INSERT INTO curs1 SET goods = CASE CEILING(rand()*3) WHEN 1 THEN 'красный' WHEN 2 THEN 'зелёный' WHEN 3 THEN 'синий' SET v1 = v1 - 1; END WHILE; END//
Решение задачи: «Заполнение столбца генерированной информацией»
textual
Листинг программы
DELIMITER // CREATE PROCEDURE dorepeat() BEGIN DECLARE x INT DEFAULT 0; REPEAT SET x = x + 1; INSERT INTO curs1 SET goods = CASE CEILING(rand()*3) WHEN 1 THEN 'красный' WHEN 2 THEN 'зелёный' WHEN 3 THEN 'синий' END; UNTIL x > 4 END REPEAT; END// DELIMITER ;
Объяснение кода листинга программы
- Создание процедуры
dorepeat
- Объявление переменной
x
типаINT
со значением по умолчанию 0 - Начало цикла
REPEAT
- Внутри цикла увеличение значения переменной
x
на 1 - Вставка записи в таблицу
curs1
с помощью оператораINSERT INTO
- Значение в столбце
goods
генерируется с помощью оператораCASE
и функцииCEILING(rand()*3)
- Возможные варианты значений для
goods
это 'красный', 'зелёный', 'синий' - Цикл выполняется пока значение переменной
x
меньше 5 - Конец цикла
REPEAT
- Восстановление стандартного разделителя
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д