#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. Я протестировал это только с помощью этой команды. Предыдущего утверждения нет. Кроме того, если бы была проблема с синтаксисом, не будет ли это выдавать ошибку и в других версиях?