MySQL хранимая процедура CREATE Ошибка - PullRequest
0 голосов
/ 15 июня 2011

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

Я получаю следующую ошибку:

1064 - у вас ошибка в синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с '' в строке 3

Это код, который я выполняю, чтобы получить эту ошибку:

CREATE PROCEDURE STORE_ANALYTICS (IN chain VARCHAR(300))
BEGIN
    UPDATE _analytics_clicks 
    SET chainCount = (chainCount + 1) 
    WHERE visitChain = chain;

    IF SELECT ROW_COUNT() = 0 THEN
        INSERT INTO _analytics_clicks (visitChain, chainCount) 
        VALUES (chain, 1);
    END IF;
END|

Стоит отметить, что перед тем, как выполнить это, я выполнил

DELIMITER |

Структура таблицы, которую я пытаюсь изменить, такова:

chainID int(11)        auto_increment
visitChain  varchar(300)    
chainCount  int(11)     

Когда я выполняю строку 3Сам заменив visitChain = chain на visitChain = '0' (0 - цепочка тестирования, которую я ввел), команда работает нормально, а chainCount увеличивается.

Любые идеи о том, почему я получаю эту ошибку / хранимую процедуруне создается?

Спасибо, Мэтт

РЕДАКТИРОВАТЬ:

Включен разделитель в команде SQL:

DELIMITER |
CREATE PROCEDURE STORE_ANALYTICS (IN chain VARCHAR(300))
BEGIN
UPDATE _analytics_clicks SET chainCount = (chainCount+1) WHERE visitChain=chain;
IF ROW_COUNT() = 0 THEN
INSERT INTO _analytics_clicks (visitChain, chainCount) VALUES (chain, 1);
END IF;
END|
DELIMITER ;

Дала мне эту ошибку: Фатальная ошибка: Максимальное время выполнения 300 секунд превышено в C: \ wamp \ apps \ phpmyadmin3.2.0.1 \ library \ import \ sql.php в строке 119

Ответы [ 2 ]

0 голосов
/ 15 июня 2011

Я подозреваю, что ваш разделитель установлен неправильно.

Я обычно включаю операторы set / unset разделителя с моим источником SQL, таким образом, "он просто работает" - это хорошопопрактикуйтесь в том, что каждый файл SQL может работать автономно, например:

delimiter ~

create procedure ...

end;~

delimiter ;

Попробуйте изменить свой разделитель на что-то менее смертельное, чем конвейерный символ - попробуйте мой символ tilda ~, который никогда не доставляет мне проблемЯ видел $$ часто используется также.

0 голосов
/ 15 июня 2011

Вы можете сделать

IF ROW_COUNT() = 0 THEN

вместо IF SELECT ROW_COUNT() = 0 THEN.Нет необходимости в SELECT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...