2015-05-28 4 views
-2

У меня есть запрос, который должен добавить случайные данные в мою таблицу, но это не сработает.Ошибка в запросе SQL

Мой запрос выглядит следующим образом:

DECLARE @i INT; 
SET @i = 0; 
WHILE (@i < 25000) DO 
BEGIN 
INSERT INTO ak_class (class_name, class_description) 
VALUES (CONCAT('Rose', RAND()*250000), 
CONCAT('Roses are awesome', RAND()*250000)); 
SET @i = @i + 1; 
END WHILE; 

Ошибка, отображаемая:

Error Code : 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 'DECLARE @i INT' at line 1 

Execution Time : 00:00:00:000 
Transfer Time : 00:00:00:000 
Total Time  : 00:00:00:000 

(0 row(s) affected) 
Execution Time : 00:00:00:000 
Transfer Time : 00:00:00:000 
Total Time  : 00:00:00:000 

Error Code : 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 'WHILE (@i < 25000) DO 
BEGIN 
INSERT INTO ak_class (class_name, class_description)' at line 1 

Execution Time : 00:00:00:000 
Transfer Time : 00:00:00:000 
Total Time  : 00:00:00:000 

(0 row(s) affected) 
Execution Time : 00:00:00:000 
Transfer Time : 00:00:00:000 
Total Time  : 00:00:00:000 

Error Code : 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 'END WHILE' at line 1 

Execution Time : 00:00:00:000 
Transfer Time : 00:00:00:000 
Total Time  : 00:00:00:000 
+1

https://dev.mysql.com/doc/refman/5.0/en/declare-local-variable.html –

+0

Я читал это, но до сих пор не понимаю .. – Kate

+0

related: https: // stackoverflow.com/questions/11754781/declare-a-variable-in-mysql – TZHX

ответ

0

MySQL не поддерживает выполнение анонимных блоков кода хранимой процедуры.

Вам необходимо создать хранимую процедуру, включая этот код, а затем вызвать ее.

Создать процедуру:

DELIMITER $$ 

DROP PROCEDURE IF EXISTS insert_random_rows $$ 

CREATE PROCEDURE insert_random_rows() 
BEGIN 
DECLARE @i INT; 
SET @i = 0; 
WHILE (@i < 25000) DO 
BEGIN 
INSERT INTO ak_class (class_name, class_description) 
VALUES (CONCAT('Rose', RAND()*250000), 
CONCAT('Roses are awesome', RAND()*250000)); 
SET @i = @i + 1; 
END WHILE; 
END $$ 
DELIMITER ; 

Вы должны назвать его сейчас:

CALL insert_ten_rows(); 

Это должно работать для вас.

0

Проблема заключалась в том, что конструкции типа WHILE может быть использована только в хранимых процедурах, поэтому решение было для создания хранимой процедуры и ее выполнения.

+0

Я не видел, когда вы разместили это, но это то, что я только что объяснил в своем ответе ниже. Это должно сработать для вас – Nighthunter22

+0

Да, у меня уже есть помощь от моего друга, и это было именно то, что вы написали выше. Благодаря!! – Kate

Смежные вопросы