Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Базы данных MySQL

  Все выпуски  

RFpro.ru: Базы данных MySQL


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 2009
∙ повысить рейтинг »
Александр Романов [Alexo]
Статус: Студент
Рейтинг: 0
∙ повысить рейтинг »
Екатерина
Статус: 1-й класс
Рейтинг: 0
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Базы данных / MySQL

Номер выпуска:508
Дата выхода:01.03.2016, 15:21
Администратор рассылки:F®ost (Администратор)
Подписчиков / экспертов:11 / 5
Вопросов / ответов:1 / 1

Консультация # 188848: Здравствуйте! Прошу помощи в следующем вопросе: изменил рабочую процедуру , пытаюсь создать новую
CREATE PROCEDURE bazochki()
BEGIN
	DECLARE bazka 
...

Консультация # 188848:

Здравствуйте! Прошу помощи в следующем вопросе:
изменил рабочую процедуру , пытаюсь создать новую

CREATE PROCEDURE bazochki()
BEGIN
	DECLARE bazka INT DEFAULT  (SELECT max(id_bases) FROM bases);
	DECLARE oldg,oldt,oldu INT DEFAULT 0;
	DECLARE oldc char(12);
	WHILE bazka>0 DO
		BEGIN
			DECLARE done INT DEFAULT 0;
			DECLARE i,g,t,u,e INT;
			DECLARE c char(12);
			DECLARE cur1 CURSOR FOR SELECT id,id_gamers,color,time,updatetime,event FROM `bases-test` WHERE id_bases_list=bazka;
			DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
			OPEN cur1;
			REPEAT
				FETCH cur1 INTO i,g,c,t,u,e;
				IF NOT done THEN
					IF g <> oldg THEN
						INSERT INTO `ilse`.`events` (`id`,`id_gamers`,`oldcolor`,`newcolor`,`up_down`,`time`)VALUES (NULL,oldg,oldc,c,'1',oldu);
						INSERT INTO `ilse`.`events` (`id`,`id_gamers`,`oldcolor`,`newcolor`,`up_down`,`time`)VALUES (NULL,g,oldc,c,'2',t);
						UPDATE `ilse`.`bases-test` SET event=1 WHERE id=i;
					END IF;
					SET oldg=g;
					SET oldc=c;
					SET oldu=u;
			UNTIL done>0 END REPEAT;
			CLOSE cur1;
		END;
	END WHILE;
END;

выдаёт ошибку #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 'done>0 END REPEAT; CLOSE cur1; END; END WHILE; END'
я всё перепроверил ,ума не приложу почему оно ругается smile

Дата отправки: 25.02.2016, 14:58
Вопрос задал: serpet (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Коцюрбенко Алексей aka Жерар (Мастер-Эксперт):

Здравствуйте, serpet!

Ошибка связана с этим фрагментом:

Код (SQL) :: выделить код
        REPEAT
            FETCH cur1 INTO i,g,c,t,u,e;
            IF NOT done THEN
               IF g <> oldg THEN
                  INSERT INTO `ilse`.`events` (`id`,`id_gamers`,`oldcolor`,`newcolor`,`up_down`,`time`)VALUES (NULL,oldg,oldc,c,'1',oldu);
                  INSERT INTO `ilse`.`events` (`id`,`id_gamers`,`oldcolor`,`newcolor`,`up_down`,`time`)VALUES (NULL,g,oldc,c,'2',t);
                  UPDATE `ilse`.`bases-test` SET event=1 WHERE id=i;
               END IF;
               SET oldg=g;
               SET oldc=c;
               SET oldu=u;
         UNTIL done>0 END REPEAT;

Здесь внутри цикла REPEAT ... UNTIL два условных оператора IF, вложенных один в другой, но только один END IF. Нужно добавить ещё один END IF, примерно так:
Код (SQL) :: выделить код
        REPEAT
            FETCH cur1 INTO i,g,c,t,u,e;
            IF NOT done THEN
               IF g <> oldg THEN
                  INSERT INTO `ilse`.`events` (`id`,`id_gamers`,`oldcolor`,`newcolor`,`up_down`,`time`)VALUES (NULL,oldg,oldc,c,'1',oldu);
                  INSERT INTO `ilse`.`events` (`id`,`id_gamers`,`oldcolor`,`newcolor`,`up_down`,`time`)VALUES (NULL,g,oldc,c,'2',t);
                  UPDATE `ilse`.`bases-test` SET event=1 WHERE id=i;
               END IF;
               SET oldg=g;
               SET oldc=c;
               SET oldu=u;
            END IF;
         UNTIL done>0 END REPEAT;

Консультировал: Коцюрбенко Алексей aka Жерар (Мастер-Эксперт)
Дата отправки: 01.03.2016, 03:22
Рейтинг ответа:

НЕ одобряю +2 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное