- DELIMITER in mysql does not work
- 3 Answers 3
- Not the answer you’re looking for? Browse other questions tagged mysql or ask your own question.
- Linked
- Related
- Hot Network Questions
- Subscribe to RSS
- Delimiter mysql не работает
- Разделители в MySQL
- Пример:
- Как правильно писать хранимые процедуры в MySQL с блоком IF/THEN/ELSE внутри? (юзерам IntelliJ IDEA тоже сюда)?
- как выполнить команду mysql DELIMITER
DELIMITER in mysql does not work
The below code works correctly when I use command line (mysql.exe) to execute, but incorrect when I use SQL Query in phpmyadmin or using ScriptRunner (Java) to execute.
The error: Error Syntax execute DELIMITER $$
How can I solve this problem?
3 Answers 3
PhpMyAdmin uses mysqli which doesn’t support delimiter. See if delimiter is needed at all. I am running a script with multiple rows and my MySQL runs all of them with semicolons as delimiters.
I found a solution here and it works for me (i’m using ScriptRunner):
just use — @DELIMITER $$ instead of DELIMITER $$
I just ran into a similar issue where my DELIMITER statement was breaking when run via Flyway despite working when I ran it through my sql client.
The issue was either indentation or hidden special characters because formatting the code in the IDE fixed the issue.
Not the answer you’re looking for? Browse other questions tagged mysql or ask your own question.
Linked
Related
Hot Network Questions
Subscribe to RSS
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
site design / logo © 2021 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2021.10.15.40479
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
Источник
Delimiter mysql не работает
Здесь могла бы быть ваша реклама
Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006
Откуда: Israel
Секрет
Теперь, когда вы уже наверняка второпях отправили свой запрос,
я расскажу вам простой секрет, который сэкономит вам уйму ожиданий,
даже если первый ответ по теме последуем сразу же.
Само собой я знаю что ответят мне тут же, и если я посмотрю
на сообщения на форуме, то пойму что в общем то я и не ошибаюсь.
Но еще я точно замечу, что очень мало тем, в которых всего два ответа :
вопрос автора и еще два сообщение вида Ответ + Спасибо
После этого приходится начинать уточнять этим неграмотным что мне надо.
Они что, сами читать не умеют? А уточнять приходится.
И иногда пока они переварят то что я им скажу проходит и не одна ночь..
Уверен что если бы я им сказал что у меня есть
фиолетовый квадрат, и нужно превратить его в синий треугольник
и я пытался взять кисточку, макнуть в банку и поводить ей по квадрату
но почему то кисточка не принимала цвет краски в банке,
то на мой вопрос — где взять правильные банки мне бы ответили гораздо быстрее
предложив её открыть, а не тратить еще стольник на жестянку.
Поэтому с тех пор я строю свои вопросы по проверенной давным давно схеме:
Что есть
Что нужно получить
Как я пытался
Почему или что у меня не получилось.
На последок как оно происходит на форумах
Новичок: Подскажите пожалуста самый крепкий сорт дерева! Весь инет перерыл, поиском пользовался!
Старожил: Объясни, зачем тебе понадобилось дерево? Сейчас оно в строительстве практически не используется.
Новичок: Я небоскрёб собираюсь строить. Хочу узнать, из какого дерева делать перекрытия между этажами!
Старожил: Какое дерево? Ты вообще соображаешь, что говоришь?
Новичок: Чем мне нравиться этот форум — из двух ответов ниодного конкретного. Одни вопросы неподелу!
Старожил: Не нравится — тебя здесь никто не держит. Но если ты не соображаешь, что из дерева небоскрёбы не строят, то лучше бы тебе сначала школу закончить.
Новичок: Не знаите — лучше молчите! У меня дедушка в деревянном доме живёт! У НЕГО НИЧЕГО НЕ ЛОМАЕТСЯ.
Но у него дом из сосны, а я понимаю, что для небоскрёба нужно дерево прочнее! Поэтому и спрашиваю. А от вас нормального ответа недождёшся.
Прохожий: Самое крепкое дерево — дуб. Вот тебе технология вымачивания дуба в солёной воде, она придаёт дубу особую прочность:
Новичок: Спасибо, братан! То что нужно.
Отредактировано модератором: Uchkuma, 26 Апреля, 2011 — 10:21:12
Источник
Разделители в MySQL
Я часто вижу, что люди используют разделители. Я попытался выяснить, что такое разделители и какова их цель. После 20 минут поиска в Google я не смог найти ответ, который меня устраивал. Итак, мой вопрос сейчас: что такое разделители и когда я должен их использовать?
Разделители, отличные от значений по умолчанию ; , обычно используются при определении функций, хранимых процедур и триггеров, в которых необходимо определить несколько операторов. Вы определяете другой разделитель, например, $$ который используется для определения конца всей процедуры, но внутри него отдельные операторы заканчиваются на ; . Таким образом, когда код запускается на mysql клиенте, клиент может сказать, где заканчивается вся процедура, и выполнить ее как единое целое, а не выполнять отдельные операторы внутри.
Обратите внимание, что DELIMITER ключевое слово является функцией только mysql клиента командной строки (и некоторых других клиентов), а не обычной функцией языка MySQL. Это не сработает, если вы попытаетесь передать его через API языка программирования в MySQL. Некоторые другие клиенты, такие как PHPMyAdmin, имеют другие методы для указания разделителя не по умолчанию.
Пример:
Попытка использования DELIMITER с клиентом, который его не поддерживает, приведет к его отправке на сервер, который сообщит об синтаксической ошибке. Например, используя PHP и MySQLi:
У вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса, чтобы использовать рядом с ‘DELIMITER $$’ в строке 1
Источник
Как правильно писать хранимые процедуры в MySQL с блоком IF/THEN/ELSE внутри? (юзерам IntelliJ IDEA тоже сюда)?
Полностью вопрос звучит так: Как правильно написать хранимую процедуру в MySQL, внутри которой есть блок IF THEN ELSE, что бы этот скрипт затем можно было выполнять из разных сред без синтаксических ошибок?
SQL-скрипт можно выполнить разными способами:
- из командной строки;
- из специальных GUI-тулз, вроде MySQL Administrator или MySQL Query Browser;
- из интегрированных сред, вроде IntelliJ IDEA.
- etc.
Пишешь обычную процедуру, и все прекрасно работает и выполняется. Особых проблем нет.
Но как только внутри процедуры объявляется блок IF THEN ELSE сразу начинаются проблемы…
Где-то приходится сперва задавать разделитель (DELIMITER $$) и только так этот скрипт будет принят и выпонен.
Кто-то, например MySQL Administator из MySQL GUI Tools, наоборот его не принимает.
Ему нужна только сама процедура…
А в IDE IntelliJ IDEA, например, при попытке запуска хранимой внутри которой есть IF THEN ELSE, что с DELIMITER $$, что без него… вообще никак не работает!
DROP PROCEDURE IF EXISTS p;
CREATE PROCEDURE p(IN Number INT)
BEGIN
IF NUMBER = 1 THEN
SELECT * FROM tblProduct WHERE ProductID = Number;
ELSE
SELECT * FROM tblProduct WHERE ProductId = 2;
END IF;
END $$
[42000][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 $$
CREATE PROCEDURE p(IN Number INT)
BEGIN
IF NUMBER = 1 THEN
SELECT * FROM tblProduct WHERE ProductID = Number;
ELSE
SELECT * FROM tblProduct WHERE ProductId = 2;
END IF;
END;
[42000][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 » at line 4
Как, вообще, процедуры пишутся в MySQL?
ЗЫЖ Сорри, может сумбурно написал, но что-то вот не понятно мне, как такое может быть что бы синтаксис процедуры мог не выполняться в какой-либо среде. В голове каша.
UPD: Похоже, что я понял, в чем дело. JDBC не поддерживает DELIMITER
Источник
как выполнить команду mysql DELIMITER
У меня огромная проблема (для меня)
Мне нужно выполнить команду MySQL DELIMITER | от PHP, но mysql_query() терпит неудачу с ошибкой. Я обнаружил, что mysql_query() не поддерживает использование DELIMITER , потому что эта команда работает только в консоли MySQL
Но когда я открываю phpMyAdmin, есть возможность изменить DELIMITER на вкладке SQL, и он работает, но я не знаю, как это сделать.
Можно ли изменить разделитель с PHP? Мне нужно это сделать, прежде чем вызывать команду CREATE TRIGGER которая использует несколько ; ,
Вам, вероятно , не нужно менять разделитель.
В CLI необходим разделитель, чтобы указать, где заканчивается оператор SQL, потому что CLI будет продолжать читать и выполнять больше инструкций, пока вы не прекратите его (например, с exit или Control-D). Но то, что он на самом деле читает, это просто поток персонажей; это как-то нужно выяснить, где заканчивается один из утверждений, а следующий начинается. Вот что делает разделитель.
В PHP каждый вызов функции выполняет один оператор. В одном вызове функции не может быть нескольких операторов, поэтому нет необходимости ограничивать их. Заявление представляет собой целую строку. Это относится к старой mysql_query а также к новым mysqli_query и PDO. Конечно, есть mysqli_multi_query если вы действительно хотите передать несколько запросов одной функции.
В случае хранимой процедуры / триггера / функции / и т. Д. Может быть несколько операторов, но это обрабатывается самой MySQL (и всегда;, AFAIK). Что касается PHP, это еще одно утверждение.
Настройка ограничителя, которую вы видите в phpMyAdmin, вероятно, используется для разделения операторов отдельно и, вероятно, выполняется в PHP-коде. Он должен сделать это, потому что он принимает вход пользователя, состоящий из нескольких операторов, но должен передавать только один оператор для вызова функции. (Я не проверял код phpMyAdmin, чтобы полностью убедиться в этом).
Помог ли этот mysql forumpost ?
В основном, он говорит, что вы должны использовать mysqli и multi_query для этого.
Это зависит. Я использую multi_query() MySQLi и оставляю ; как это делается при выполнении фактически созданной процедуры (PHP 5.6 и MySQL 5.6). Я думаю, вам не нужен ограничитель осторожности, оставьте целевой код только тогда, возможно, сработает. Вы можете попытаться запросить SQL только как
вам нужна хранимая процедура (процедура, функция), чтобы включить все необходимые запросы,
поэтому в PHP вы можете вызывать упорядоченную процедуру элегантно
Источник