SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 25.08.2012 16:58:19

evgen24
Участник
Зарегистрирован: 25.08.2012
Сообщений: 5

Заполнение таблиц случайными числами

Всем привет! Возникла проблема с заполнением таблицы числами к примеру 1,2,3,4,5

вот что я пишу для этого в SQLyog

USE evgen24;

DROP TABLE map;
CREATE TABLE `map`(
    `id` INT(10) NOT NULL AUTO_INCREMENT,
    `x` INT(5) NOT NULL,
    `y` INT(5) NOT NULL,
    `status` INT(3) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=MYISAM DEFAULT CHARSET=utf8;


DECLARE i INT DEFAULT 0;

WHILE i < 400 DO
INSERT INTO map (X,
        Y,
        STATUS)
        VALUES('1','1', FLOOR((RAND() * 5)));
           
SET i = i + 1;           
END WHILE


мне отвечает, что так переменные не объявляются. Что делать?

Неактивен

 

#2 26.08.2012 14:01:38

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Заполнение таблиц случайными числами

DECLARE можно использовать только внутри хранимых процедур

Неактивен

 

#3 26.08.2012 21:04:13

evgen24
Участник
Зарегистрирован: 25.08.2012
Сообщений: 5

Re: Заполнение таблиц случайными числами

а как мне написать? подскажите пожалуйста

Неактивен

 

#4 26.08.2012 21:26:41

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Заполнение таблиц случайными числами

CREATE PROCEDURE X()
BEGIN
  DECLARE i INT DEFAULT 0;
  WHILE i < 400 DO
  INSERT INTO map (X,
        Y,
        STATUS)
        VALUES('1','1', FLOOR((RAND() * 5)));
  SET i = i + 1;          
  END WHILE;
END


Затем
CALL X();


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

Неактивен

 

#5 26.08.2012 22:07:22

evgen24
Участник
Зарегистрирован: 25.08.2012
Сообщений: 5

Re: Заполнение таблиц случайными числами

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

Неактивен

 

#6 26.08.2012 22:14:03

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Заполнение таблиц случайными числами

Я не знаю ничего про SQLyog, но говорят, что в нем можно работать как в консоли MySQL ( http://www.webyog.com/faq/28_48_en.html ). Это значит, что сначала нужно переопределить терминатор строки, чтобы точку с запятой можно было использовать внутри процедуры. В консольном клиенте это работает так:

DELIMITER //
CREATE PROCEDURE X()
BEGIN
  DECLARE i INT DEFAULT 0;
  WHILE i < 400 DO
  INSERT INTO map (X,
        Y,
        STATUS)
        VALUES('1','1', FLOOR((RAND() * 5)));
  SET i = i + 1;          
  END WHILE;
END//
DELIMITER ;
 

Неактивен

 

#7 26.08.2012 22:28:11

evgen24
Участник
Зарегистрирован: 25.08.2012
Сообщений: 5

Re: Заполнение таблиц случайными числами

вот с этим стало все понятно, спасибо огромное. Но всеже процедура не хочет выполняться даже 1 раз, ссылаясь на thread stack overrun, Типа что ей нехватило 128 000 байт и чтоб я use mysqld -O thread stack=# Это как понимать?

Неактивен

 

#8 26.08.2012 22:40:05

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Заполнение таблиц случайными числами

Это похоже на багу/нежелательное поведение сервера. Найдите файл my.cnf (или my.ini в windows) и в раздел [mysqld] добавьте строчку
thread_stack=512k

После этого перезапустите сервис mysql.

Неактивен

 

#9 26.08.2012 23:07:04

evgen24
Участник
Зарегистрирован: 25.08.2012
Сообщений: 5

Re: Заполнение таблиц случайными числами

урааа... заработало. Спасибо огромное

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson