powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Возврат ошибки из триггера?
6 сообщений из 6, страница 1 из 1
Возврат ошибки из триггера?
    #38526759
OlegROA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, коллеги!

Как можно вернуть ошибку из триггера?
Т.е., к примеру, если в before insert триггере будет выявлено несоответствие данных, которое не позволяет добавить эту запись в таблицу, то я завершаю выполнение триггера через LEAVE.
Но, кроме этого, нужно как то дать понять клиентскому приложению из-за чего запись не была добавлена.
Идеальным решением был-бы возврат ошибки через систему регистрации ошибок самого mysql-сервера, что бы можно было их получить штатно так, как обычные ошибки при вставке/апдейте/удалении, которые генерит сервер.

Есть у кого какие мысли по этому поводу?

Спасибо!
...
Рейтинг: 0 / 0
Возврат ошибки из триггера?
    #38526771
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно по старинке - заведомо ошибочной операцией, например, делением на 0.
Можно по-новому - SIGNAL .
...
Рейтинг: 0 / 0
Возврат ошибки из триггера?
    #38526935
OlegROA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftМожно по старинке - заведомо ошибочной операцией, например, делением на 0.Увы!
Зависит, вероятно, от настроек (или сборки) сервера - оба моих сервера на деление на ноль возвращают результат NULL, без каких-либо ошибок.
...
Рейтинг: 0 / 0
Возврат ошибки из триггера?
    #38526967
OlegROA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В результате экспериментов нашел, практически полностью устраивающее меня, решение!
Что-то типа:
Код: sql
1.
2.
3.
IF NOT CheckEMail(NEW.email) THEN
   SELECT `Incorrect email address!` INTO @error;
END IF;

В результате, из-за отсутствия в рабочих таблицах указанного поля, выполнение триггера (и, соответственно, операция добавления/изменения записи) прерывается по ошибке и сервер возвращает клиенту ошибку типа "Не найдена колонка 'Incorrect email address!'".
В принципе, можно оставить эту ошибку без обработки, а можно и вырезать из нее текст нашего сообщения!
...
Рейтинг: 0 / 0
Возврат ошибки из триггера?
    #38526994
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegROA,

Можно и так. В доке по SIGNAL-у предлагается подобный вариант:
SIGNAL SyntaxWithout SIGNAL, it is necessary to resort to workarounds such as deliberately referring to a nonexistent table to cause a routine to return an error.
...
Рейтинг: 0 / 0
Возврат ошибки из триггера?
    #38527003
OlegROA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftМожно по-новому - SIGNAL .Спасибо за подсказку!!!
Получилось вообще идеальное решение - простое и действенное:
Код: sql
1.
2.
3.
4.
IF NOT CheckEMail(NEW.email) THEN
SIGNAL SQLSTATE '10001'
  SET MESSAGE_TEXT = 'Incorrect e-mail address!';
END IF;

В результате, выполнение триггера и самой операции добавления/изменения записи прерывается и на клиент возвращается стандартная ошибка sql-сервера с моим кодом '10001' и моим-же сообщением 'Incorrect e-mail address!'!!!
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Возврат ошибки из триггера?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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