Странные ошибки с разделителем при создании триггеров - PullRequest
0 голосов
/ 10 июня 2011

ОК, происходит что-то странное, и я не могу этого понять. Я создаю некоторые триггеры, но я получаю странные ошибки при попытке создать их на работающей БД. Пример запроса такой:

delimiter |

CREATE TRIGGER debug_upd_before BEFORE UPDATE ON properties_availability
FOR EACH ROW BEGIN
    INSERT INTO debug_upd_before SET timestamp = NOW(), avID = OLD.avID, avPropertyID = OLD.avPropertyID, 
    avAvailableFrom = OLD.avAvailableFrom, avAvailableTo = OLD.avAvailableTo, avPrice = OLD.avPrice, 
    avIsAvailable = OLD.avIsAvailable;
END|

...

, который выполняется хорошо в местном масштабе. Я использую phpmyadmin, потому что у меня нет другого доступа к онлайн-базе данных. Я знаю, что у меня нет полных прав и думаю, что это может быть как-то связано с этим, но я получаю ошибку:

У вас ошибка в синтаксисе SQL; проверьте руководство, которое соответствует ваша версия сервера MySQL для правильный синтаксис для использования рядом с разделителем |

не "у вас нет прав на это" или что-то в этом роде. То же самое происходит, когда я пытаюсь выполнить что-то более простое, например:

delimiter |
select 1|
select 2

Ошибка, которую я получаю, та же самая, и я не могу установить разделитель, и по умолчанию у меня не работает, потому что я должен использовать после запросов внутри триггеров. Я пробовал другие символы в качестве разделителей, но результат тот же. Есть идеи о том, в чем проблема и как ее избежать? Некоторые из триггеров выполняют более одного запроса, если это имеет значение ...

Спасибо!

Ответы [ 2 ]

1 голос
/ 10 июня 2011

Попробуйте это утверждение (без разделителей) -

CREATE TRIGGER debug_upd_before BEFORE UPDATE ON properties_availability
FOR EACH ROW
INSERT INTO debug_upd_before SET
  timestamp = now(),
  avID = OLD.avID,
  avPropertyID = OLD.avPropertyID,
  avAvailableFrom = OLD.avAvailableFrom,
  avAvailableTo = OLD.avAvailableTo,
  avPrice = OLD.avPrice,
  avIsAvailable = OLD.avIsAvailable;
0 голосов
/ 10 июня 2011

Проблема в том, что | является побитовым или.
Таким образом, вы используете зарезервированный символ в качестве разделителя.

Вместо этого используйте $$.

...