Как прочитать ошибку synax 1064 в mariadb / mysql - PullRequest
0 голосов
/ 28 февраля 2020

Рассмотрим следующий запрос sql:

CREATE FUNCTION spell_number (integer a) RETURNS string
BEGIN
  ...
END;

Возвращает обобщенный синтаксис c "В синтаксисе SQL есть ошибка; проверьте руководство, соответствующее вашему MySQL версия сервера для правильного синтаксиса для использования рядом со строкой "

Можно ли получить такую ​​ошибку, как следующее? :

ожидал допустимый тип, вместо него встречается «строка»

1 Ответ

1 голос
/ 28 февраля 2020

Обычно ошибка синтаксического анализа 1064 носит описательный характер: она сообщает вам, где анализатор обнаружил ошибку и в какой строке:

$ perror 1064
MySQL error code 1064 (ER_PARSE_ERROR): %s near '%-.80s' at line %d

В вашем примере строка позади near кажется пустой (= '' ). Это происходит, если синтаксический анализатор достиг конца оператора SQL, но ему нужно больше данных. Обычно это происходит, если вы пытаетесь создать процедуру или функцию в клиенте командной строки без разделителя:

Разделителем по умолчанию в клиенте командной строки является точка с запятой (;). Клиент командной строки анализирует функцию CREATE и отправляет первую часть до разделителя на сервер. Поскольку теперь оператор CREATE является неполным, синтаксический анализатор достигает конца оператора, но ожидает больше данных.

Пример:

MariaDB [test]> CREATE FUNCTION test (a integer) RETURNS integer
    -> BEGIN
    ->    SET a=a*2;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 3
MariaDB [test]> delimiter //
MariaDB [test]> CREATE FUNCTION test (a integer) RETURNS integer
    -> BEGIN
    ->    SET a=a*2;
    ->    RETURN a;
    -> END//
Query OK, 0 rows affected (0.01 sec)

А теперь появилось описательное сообщение об ошибке:

CREATE FUNCTION test1 (a integer) RETURNS integer
    -> BEGIN
    ->    "This should return a descriptive error message";
    ->    RETURN a;
    -> END//
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '"This should return a descriptive error message";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...