Синтаксическая ошибка разделителя MySQL

#c #mysql #sql #mariadb

#mysql #синтаксис #разделитель

Вопрос:

Я пытаюсь изменить разделитель команд MySQL, чтобы я мог создать процедуру с несколькими командами в ней. Однако команда разделителя, похоже, не распознается в MySQL 5.1.47. Я протестировал его на MySQL 5.0.91, и там он действительно работал.

 DELIMITER //;
DELIMITER ;//
 

Я пытаюсь запустить это из phpmyadmin в обеих ситуациях. Использование 5.0.91 вместо этого не вариант, потому что мне нужно использовать events ( CREATE EVENT ).

Сообщение об ошибке:

 #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER //' at line 1 
 

Есть ли причина, по которой он не работает, или есть альтернатива для выполнения того же самого (создание процедуры с несколькими запросами)?

Комментарии:

1. Я читал, что DELIMITER на самом деле это не команда MySQL, это команда клиента. Означает ли это, что phpMyAdmin должен поддерживать его в отличие от MySQL?

Ответ №1:

DELIMITER не является командой MySQL. Это команда, которую должен поддерживать ваш клиент MySQL. Я запускал phpMyAdmin 2.8.2.4, который его не поддерживал. Когда я обновился до новейшей версии, которая в настоящее время является 3.4.9, она работала просто отлично. Ваша версия MySQL не имеет никакого отношения DELIMITER к тому, поддерживается она или нет.

Ответ №2:

Вам не нужно разделять операторы DELIMIT

 DELIMITER //

procedure here etc

DELIMITER ;
 

Точно так же, как «Определение хранимых программ» в документах MySQL.

И если вы можете контролировать версии, то последняя — 5.5.20. Почему бы не использовать это?

Редактировать:

Сообщение об ошибке указывает на ошибку в предыдущей инструкции… если это не может показаться, заставьте это сделать так

 ; /* <- force previous statement termination */ DELIMITER //

procedure here etc

DELIMITER ;
 

Комментарии:

1. Я не могу контролировать версии, просто так получилось, что у меня есть несколько сред, в которых работают разные версии. Кроме того, предложение, которое вы опубликовали, не сработало. Появляется то же сообщение об ошибке.

2. @Patrickdev: ошибка будет в вашем предыдущем заявлении, которое будет исправлено…

3. Я протестировал это только с помощью этой команды. Предыдущего утверждения нет. Кроме того, если бы была проблема с синтаксисом, не будет ли это выдавать ошибку и в других версиях?