Вниз
Скачать: CL | DM;

Ошибка при вставке записи и коммит транзакции   Найти похожие ветки 

← →
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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.017 c
2-1186544981
Alex_Y
2007-08-08 07:49
2007.09.02
как запретить нажатие кнопки свернуть в окно


3-1178868135
sergeii
2007-05-11 11:22
2007.09.02
SQL


15-1185607519
Ыщтмихайло
2007-07-28 11:25
2007.09.02
Куда податься ламерюге


2-1186688759
vicegen
2007-08-09 23:45
2007.09.02
Про файл-мэппинг


15-1186037896
Knight
2007-08-02 10:58
2007.09.02
Хочу пойти учиться заочно...




   Наверх