Я думаю, что делаю что-то не так с написанием оператора WHILE в приведенном ниже скрипте mysql.Я протестировал каждый отдельный компонент приведенного ниже кода, и все работает изолированно (нет ошибок, выданных тестовым выводом, совпадающим с ожидаемым), кроме WHILE (выдает ошибку и вводит только значения NULL и проходит только одну итерацию цикла).Я следую https://dev.mysql.com/doc/refman/5.7/en/while.html задокументированным инструкциям, но мне, кажется, что-то не хватает.Я хочу вставить несколько записей (миллионов) в эту таблицу.Что я делаю неправильно?Почему этот оператор WHILE не зациклен и почему он вставляет только значения NULL?
Источник
USE wordpress;
SET @i := 0;
WHILE @i < 10 DO
SET @rand_value = CAST(FLOOR(RAND()*10000) as CHAR);
SELECT @rand_value as CONCAT('rand_value at ', CAST(@i as CHAR));
INSERT INTO wp_wpdatatable_1 (jiraissue, assignee, testcasename, description, image, automation, testresult, date, status, priority, os, testtype, location, flavor)
VALUES
(CONCAT('TEST ISSUE ', @rand_value)
, CONCAT('ASSIGNEE ', @rand_value)
, CONCAT('TEST CASE NAME ', @rand_value)
, CONCAT('DESCRIPTION ', @rand_value)
, CONCAT('IMAGE ', @rand_value)
, CONCAT('AUTOMATION ', @rand_value)
, CONCAT('TESTRESULT ', @rand_value)
, CONCAT('DATE ', @rand_value)
, CONCAT('STATUS ', @rand_value)
, CONCAT('PRIORITY ', @rand_value)
, CONCAT('OS ', @rand_value)
, CONCAT('TESTTYPE ', @rand_value)
, CONCAT('LOCATION ', @rand_value)
, CONCAT('FLAVOR ', @rand_value));
SET @i := @i + 1;
END WHILE;
Выход
mysql> source /root/populate_wp_wpdatatable_1.sql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
Query OK, 0 rows affected (0.00 sec)
ERROR 1064 (42000): 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 'WHILE @i < 10 DO
SET @rand_value = CAST(FLOOR(RAND()*10000) as CHAR)' at line 1
ERROR 1064 (42000): 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 '('rand_value at ', CAST(@i as CHAR))' at line 1
Query OK, 1 row affected (0.01 sec)
Query OK, 0 rows affected (0.00 sec)
ERROR 1064 (42000): 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 'END WHILE' at line 1
Что-то странное в том, что в выводе вы видите «1 строка затронута».Таким образом, он действительно проходит ОДНУ итерацию цикла WHILE, но он делает это только один раз и добавляет в таблицу только значения NULL.Надеюсь, кто-то может определить, что мне не хватает.Заранее спасибо!