IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.
Модератор: kdv
-
Pavel_ch
- Сообщения: 24
- Зарегистрирован: 09 мар 2006, 15:21
Сообщение
Pavel_ch » 06 авг 2008, 11:32
Вопрос такой.
Вот скажем добавляется в таблицу в одной транзакции 40 записей. В триггере Before Insert на эту таблицу каждая запись проверяется на некое условие и если это условие не выполняется, то вызывается исключение:
Код: Выделить всё
if (real_oper_group <> call_oper_gr) then exception e_oper_incorrect;
Если возникнет исключение в БД, то соответственно приложение тоже отреагирует на него исключением и запишет данные с ошибкой уже в другую таблицу. А вот на сервере с записью на которой ошибка возникла что будет? Триггер продолжит выполнение после exception или остановится? Insert будет засчитан?
И потом если по окончании обработки всех 40 записей будет сделан commit, где ошибочные данные окажутся - в обеих таблицах?
FB 2.1.1
-
Pavel_ch
- Сообщения: 24
- Зарегистрирован: 09 мар 2006, 15:21
Сообщение
Pavel_ch » 06 авг 2008, 13:20
Спасибо за ссылку.
Если я правильно понял статью, то в моём случае "сервер сам откатит операцию INSERT при возникновении в ней исключения"
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 06 авг 2008, 13:29
статью можно было и не читать. операция, которая завершилась ошибкой, естественно не меняет данные, т.к. произошла ошибка, не так-ли?
а уж чем завершать транзакцию, коммитом или роллбэком, зависит от наличия или отсутствия взаимосвязей между отдельными операторами SQL в этой транзакции.