mariadb было сообщено об ошибке "end if" - PullRequest
0 голосов
/ 10 октября 2019

У меня в операторе SQL было сообщено 1064 ошибки, пожалуйста, помогите!

UPDATE `MessageQueue`
SET `Status`= 0, `RetryCount`= `RetryCount`+ '1', `LastRetryTime` = NOW(), `CanBeRemoved`=1
WHERE `MsgHash`= 1 AND `Status`=0;
SET @retVal = ROW_COUNT();
IF (@retVal = 0) THEN
    UPDATE `MessageQueue` SET `Status`= 5 WHERE `MsgHash`= 1;
    END IF;
SELECT @retVal;

это после выполнения: (затронуто 1 строк) Время выполнения: 00: 00: 00: 000 ПередачаВремя: 00: 00: 00: 016 Общее время: 00: 00: 00: 016

(затронуто 0 строк) Время выполнения: 00: 00: 00: 000 Время передачи: 00:00:00: 015 Общее время: 00: 00: 00: 015

错误 码: 1064 Ошибка синтаксиса SQL;проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с '' в строке 2 ------- там, если удалить ";"в "ОБНОВЛЕНИЕ MessageQueue УСТАН Status = 5 ГДЕ MsgHash = 1;"эта ошибка исчезнет ------- Время выполнения: 00: 00: 00: 000 Время передачи: 00: 00: 00: 000 Общее время: 00: 00: 00: 000

错误 码:1064 В вашем синтаксисе SQL есть ошибка;проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса, который следует использовать в конце строки «end if» в строке 1

Время выполнения: 00: 00: 00: 000 Время передачи: 00: 00: 00: 000Общее время: 00: 00: 00: 000

(возвращено 1 строк) Время выполнения: 00: 00: 00: 000 Время передачи: 00: 00: 00: 000 Общее время: 00:00: 00: 000

1 Ответ

0 голосов
/ 13 октября 2019

Пара вопросов:

  • Какую версию MariaDB вы используете? ?.

Я не могу воспроизвести проблему из анонимного блока:

BEGIN NOT ATOMIC
  UPDATE `MessageQueue`
  SET `LastRetryTime` = NOW()
  WHERE `Status` = 1;

  SET @`retVal` := ROW_COUNT();

  IF (@`retVal` = 0) THEN
    UPDATE `MessageQueue`
    SET `Status`= 5
    WHERE `Status`= 0;
  END IF;
END;

См. dbfiddle .

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