Обычно ошибка синтаксического анализа 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";