Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
3-1178619745
pavel_guzhanov
2007-05-08 14:22
2007.09.02
Ошибка при вставке записи и коммит транзакции


3-1178781838
alexey_mas
2007-05-10 11:23
2007.09.02
передача процедуры в процедуре


5-1160461319
Priest
2006-10-10 10:21
2007.09.02
Функция UnRegister для пакета


2-1185991030
Comp
2007-08-01 21:57
2007.09.02
Создать нечто подобное StringGrid на API


3-1178536064
Xmen
2007-05-07 15:07
2007.09.02
Пополнения автоинкрементного поля





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский