Форум: "Базы";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];
ВнизОшибка при вставке записи и коммит транзакции Найти похожие ветки
← →
pavel_guzhanov © (2007-05-08 14:22) [0]Здравствуйте!
Подскажите пожалуйста в таком теоретическом вопросе. Я в цикле вставляю записи в базу. Для вставки использую хранимую процедуру. Цикл повторяется много раз (допустим, 10000) После выхода из цикла я делаю IBTransaction.commit. Все проходит без ошибок. А если произойдет следующее: Во время одной итерации цикла вставятся некорректные данные. При выполнении коммита после цикла вставится что-нибудь в базу? И что вставится? Все данные до ошибочной записи? Или вообще ничего не вставится?
← →
Sergey13 © (2007-05-08 14:36) [1]> [0] pavel_guzhanov © (08.05.07 14:22)
> Или вообще ничего не вставится?
Именно так. Если транзакция работает именно так, как ты описал.
← →
ANB © (2007-05-08 15:21) [2]
> Именно так. Если транзакция работает именно так, как ты
> описал.
Вообще то тут код надо смотреть.
Но я не увидел по тексту, что автор перехватывал исключения и делал роллбэк.
ИМХО :
Т.к. инсерты идут не одним оператором, а в цикле, то получив исключение на ошибочной записи, процедура прервется и БД останется в незакоммиченном состоянии. При этом ранее добавленные записи окажуться в подвешенном состоянии.
Далее, если при выходе из приложения у него пройдет автоматический коммит, то записи сядут в базу окончательно, а если роллбэк - то отваляться.
← →
pavel_guzhanov © (2007-05-08 15:27) [3]
> записи сядут в базу окончательно, а если роллбэк - то отваляться
Все-таки не так... После цикла идет принудительный коммит, но в базе не появляется ни одной записи...
> Но я не увидел по тексту, что автор перехватывал исключения
> и делал роллбэк.
Я не перехватывал исключений, и, соответственно, не делал роллбэка....
← →
Desdechado © (2007-05-08 15:37) [4]Если твоя хранимая процедура сама обрабатывает исключительные ситуации, то на клиента их отдавать не нужно, т.е. транзакцию можно подтвердить.
← →
ANB © (2007-05-08 15:39) [5]
> После цикла идет принудительный коммит, но в базе не появляется
> ни одной записи...
У тебя до коммита явно выполнение не доходит.
Значит, все остается на усмотрение деструктора TIBTransaction.
Вроде как в нем можно настраивать, чего он должен сделать при выходе из программы - коммит или роллбэк.
А до выхода из программы добавленные записи никто не увидит, кроме твоей же программы (да еще и из той же транзакции).
← →
Johnmen © (2007-05-08 17:36) [6]
> А если произойдет следующее: Во время одной итерации цикла
> вставятся некорректные данные. При выполнении коммита после
> цикла вставится что-нибудь в базу? И что вставится?
Закоммитится всё, что успешно вставилось.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.038 c