SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 21.09.2009 11:35:52

Dimon
Завсегдатай
Зарегистрирован: 06.09.2007
Сообщений: 45

Отрубились триггеры

Здраствуйте.
В один прекрасный момент перестали выполняться триггеры. Причем не после какой-то перезагрузки, а во время работы, работали, а потом раз и перестали. Куда копать подскажите?

Неактивен

 

#2 21.09.2009 12:16:18

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Отрубились триггеры

Звучит как-то подозрительно. Насколько я знаю, MySQL не умеет отключать триггеры, как
индексы. Сами триггеры живы? В смысле — есть? Если есть — хватает ли у них прав менять
нижележащие таблицы? Попробуйте удалить-пересоздать триггеры?

Неактивен

 

#3 21.09.2009 13:45:16

Dimon
Завсегдатай
Зарегистрирован: 06.09.2007
Сообщений: 45

Re: Отрубились триггеры

Триггеры-то живы, причем перестали выполняться те, что "ДО", а те что "ПОСЛЕ" выполняются. в тех, что "ДО" просто вызывается процедура с вызовой спец.ошибки для выводя ошибок.
Удаление и создание не помогает. В триггере выполняется такая вещь:
IF new.DATA_BEG > new.DATA_END THEN   
    CALL P_MyErr ('Дата закрытия введена некорректно');
END If
Процедура выглядит так.
CREATE PROCEDURE P_MyERR(IN Verr Varchar (500))
  SQL SECURITY INVOKER
BEGIN
  declare xX TINYINT;
  SET Verr = CONCAT_WS('', '[MyERR]', Verr, '[MyERR]');
  SET xX = Verr;
END
Это типа один из способов вывода ошибки триггера.
Кстати это произошло, когда откомпилировал с троссировкой PROCEDURE P_MyERR.
АЛЛЕЛУЮ убиение P_MyERR и создание заново помогло.

Отсюда вытекает второй вопрос: если в триггере большой текст ошибки, то он обрезается, можно с этим что-то сделать?, т.е. например вместо 'Дата закрытия введена некорректно' писать что-то больше скорее всего 255 символов, то обрезает.

Неактивен

 

#4 09.10.2009 12:16:13

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Отрубились триггеры

Ваша процедура у меня не вызывает ошибку, а вызывает warning.

Пересоздайте процедуру, установив SET @@sql_mode = 'traditional';

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson