Подскажите по exception

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
Pavel_ch
Сообщения: 24
Зарегистрирован: 09 мар 2006, 15:21

Подскажите по exception

Сообщение 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

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 06 авг 2008, 12:18

Стоит почитать вот эту статью.

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 в этой транзакции.

Ответить