@khodos_dmitry

Что не так с этой процедурой?

CREATE PROCEDURE 'add_parent_id_to_city' ()
DELIMITER //
begin
DECLARE i INT DEFAULT 4700;
WHILE i > 0 DO
UPDATE `cpl_city` SET `parent_id` = (SELECT `id` FROM `cpl_city` WHERE `east` <= (SELECT `east` FROM `cpl_city` WHERE `id` = i) AND `west` >= (SELECT `west` FROM `cpl_city` WHERE `id` = i) AND `north` <= (SELECT `north` FROM `cpl_city` WHERE `id` = i) AND `south` >= (SELECT `south` FROM `cpl_city` WHERE `id` = i));
i = i - 1;
END WHILE;
END
//

Я не вижу здесь ошибок. Но, выдает 11 ошибок:
Найдено 11 ошибок при анализе.

Неизвестное ключевое слово. (near "DECLARE" at position 7)
Неожиданный токен. (near "i" at position 15)
Неизвестное ключевое слово. (near "INT" at position 17)
Неизвестное ключевое слово. (near "DEFAULT" at position 21)
Неожиданный токен. (near "4700" at position 29)
Неизвестный оператор. (near "WHILE" at position 36)
Неожиданное начало выражения. (near "i" at position 370)
Неожиданное начало выражения. (near "i" at position 374)
Неожиданное начало выражения. (near "1" at position 378)
Неизвестный оператор. (near "END" at position 382)
Неизвестный оператор. (near "END" at position 394)
  • Вопрос задан
  • 767 просмотров
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
1. DECLARE должен быть до CREATE PROCEDURE.
2. Запрос UPDATE бессмысленный, он 4700 раз поменяет поле `parent_id` во всех строках таблицы `cpl_city`, если вообще выполнится.
Ответ написан
orlov0562
@orlov0562
I'm cool!
DELIMITER не там

DROP PROCEDURE add_parent_id_to_city;

DELIMITER //
CREATE PROCEDURE add_parent_id_to_city ()
BEGIN
    DECLARE i INT DEFAULT 4700;
    WHILE (i > 0) DO
      SELECT 1+2 as result;
      SET i = i - 1;
    END WHILE;
END//
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы