Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Проблема с DELIMITER / 6 сообщений из 6, страница 1 из 1
16.05.2017, 22:26
    #39454203
4wiwb
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с DELIMITER
Есть такой кусок скрипта

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
DELIMITER //
CREATE TRIGGER test_trigger BEFORE INSERT ON BILL 
FOR EACH ROW BEGIN
	SET NEW.pass=ENCODE(NEW.pass, '123');
END//

DROP TRIGGER test_trigger;
DROP TABLE BILL;


И на последней строчке показывает ошибку DROP is not valid input at this position . Подозреваю что из за разделителя.
Подскажите как правильно закрывать такие блоки, чтобы все было валидно.
...
Рейтинг: 0 / 0
16.05.2017, 22:48
    #39454205
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с DELIMITER
4wiwb,

Ну так или верните delimiter обратно или пользуйтесь этим.
...
Рейтинг: 0 / 0
16.05.2017, 22:51
    #39454206
4wiwb
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с DELIMITER
Melkij, так я же закрыл его в END//. Что ему еще нужно?
...
Рейтинг: 0 / 0
16.05.2017, 22:56
    #39454208
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с DELIMITER
Первой командой Вы изменили его. Теперь делимитер - это не ';', а '//'. Но обратно Вы его не вернули, так что надо продолжать использовать новый. Т.е. правильно - например, так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
DELIMITER //
CREATE TRIGGER test_trigger BEFORE INSERT ON BILL 
FOR EACH ROW BEGIN
	SET NEW.pass=ENCODE(NEW.pass, '123');
END//

DROP TRIGGER test_trigger//
DROP TABLE BILL//


Но лучше так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
DELIMITER //
CREATE TRIGGER test_trigger BEFORE INSERT ON BILL 
FOR EACH ROW BEGIN
	SET NEW.pass=ENCODE(NEW.pass, '123');
END//
DELIMITER ;
DROP TRIGGER test_trigger;
DROP TABLE BILL;
...
Рейтинг: 0 / 0
16.05.2017, 23:03
    #39454212
4wiwb
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с DELIMITER
Akina, спасибо, теперь работает.
А в чем причина почему мне нужно задавать свой делемитер перед тригером или функцией? Сколько туториалов смотрел везде делали именно так, вместо использования стандартного?
...
Рейтинг: 0 / 0
16.05.2017, 23:21
    #39454215
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с DELIMITER
4wiwbпочему мне нужно задавать свой делемитер перед тригером или функцией?Весь текст триггера/функции/процедуры (строки 2..5 в Вашем коде) - это ОДИН оператор. Однако внутри него (в строке 4) встречается символ стандартного делимитера, который (если делимитер не изменить) означает "инструкция закончилась". Чтобы этот символ не привёл к преждевременному завершению инструкции, временно изменяется символ-делимитер, и тогда символ стандартного делимитера к завершению инструкции не приводит.

PS. Рекомендую для единообразия последним символом временного делимитера делать символ стандартного делимитера, например
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
DELIMITER //; -- установка нестандартного делимитера
CREATE TRIGGER test_trigger BEFORE INSERT ON BILL 
FOR EACH ROW BEGIN
	SET NEW.pass=ENCODE(NEW.pass, '123'); -- стандартный делимитер, но в данном случае не срабатывает
END; -- ещё один стандартный делимитер
//; -- нестандартный делимитер
DELIMITER ; -- возврат к стандартному делимитеру
DROP TRIGGER test_trigger; -- стандартный делимитер, и тут он сработает
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Проблема с DELIMITER / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]