Re: when any do - он что откатыва ет
Я еще раз дико извиняюсь, может еще подскажите, а то сам что то найти не могу. очень хочу текст ошибки получить т.е. если происходит ексепшен, что бы можно было в лог сохранить, что именно там произошло, а позже в спокойной обстановке анализировать. может подскажите как (или носом ткнете, где это написано), а то как то сам никак не найду, возможно ли такое вообще
Re: when any do - он что откатыва ет
21.09.2010 11:17, Качановский Дмитрий пишет: Добрый всем день тут уперся в такой вот момент есть процедура примерно такого вида begin insert... update... ... insert... -- вот здесь происходит ошибка when any do begin and end я почему то был уверен, что все операции, которые выполнялись до сбойного статмента (в пределах блока begin end) будут отменены Если нет WHEN, то отменены будут все. Иначе только сбойный. но на тестах сейчас получил, что откатился только сам статмент все остальные изменения были приняты т.е., это я глубоко заблуждался? Так точно. Там еще много нюансов, о которых ты не в курсе. -- Дмитрий Еманов
Re: when any do - он что откатыва ет
Если нет WHEN, то отменены будут все. Иначе только сбойный. все отменены могут быть только если роллбак сделал или я снова ошибаюсь но на тестах сейчас получил, что откатился только сам статмент все остальные изменения были приняты т.е., это я глубоко заблуждался? Так точно. Там еще много нюансов, о которых ты не в курсе. возможно но если не против задам тогда такой вопрос, может подскажете есть операции которые выполняются в цикле на каждом шаге может произойти сбой (на одном шаге более одной операции) если это происходит надо откатить именно этот шаг и идти дальше почему то в свое время прочитав описание этого оператора в книге Х.Борри я решил, что именно таким образом могу решить эту проблему видимо что то не так понял а можно ли как то подругому, не откатывая всю транзакцию и не покидая текущей процедуры откатить блок операций?
Re: when any do - он что откатыва ет
Качановский Дмитрий пишет: а можно ли как то подругому, не откатывая всю транзакцию и не покидая текущей процедуры откатить блок операций? дополню свой вопрос, если заверну все операции одного шага в процедуру - это что-то меняет?
Re: when any do - он что откатыва ет
21.09.2010 12:19, Качановский Дмитрий пишет: Если нет WHEN, то отменены будут все. Иначе только сбойный. все отменены могут быть только если роллбак сделал или я снова ошибаюсь Все в пределах begin/end блока. есть операции которые выполняются в цикле на каждом шаге может произойти сбой (на одном шаге более одной операции) если это происходит надо откатить именно этот шаг и идти дальше Попробуй так: begin begin шаг end when any do begin end end -- Дмитрий Еманов
Re: when any do - он что откатыва ет
Dmitry Yemanov пишет: 21.09.2010 12:19, Качановский Дмитрий пишет: Если нет WHEN, то отменены будут все. Иначе только сбойный. все отменены могут быть только если роллбак сделал или я снова ошибаюсь Все в пределах begin/end блока. ну да именно так там и было написано, но или я неправильно это понимаю, или что то не так делаю, поскольку у меня результат предыдущих операторов сохраняется. есть операции которые выполняются в цикле на каждом шаге может произойти сбой (на одном шаге более одной операции) если это происходит надо откатить именно этот шаг и идти дальше Попробуй так: begin begin шаг end when any do begin end end поробовал пока результат тот же может конечно сработал кеш метаданных и отрабатывает предыдущая версия, но вроде переконнекчивался, так что не должен бы.
Re: when any do - он что откатыва ет
приношу извинения, вроде заработало наверное я все-таки неправильно понял эту фразу вообщем пошел тестировать дальше спасибо
Re: when any do - он что откатыва ет
Sergey Mereutsa пишет: Привет! Если нет WHEN, то отменены будут все. Иначе только сбойный. Тут все большие, так что Дим, ты уточняй, что сохранены они будут если не делать явной отмены транзакции, а просто подтверждать её. Но если анализировать ошибку снаружи вызова и делать откат - то волосы будут мягкими и шелковистыми. в том то и дело, что я не хочу что бы ее анализировали снаружи (моя часть только база), я хочу что бы наверх отдавался только какой-то код. А если по ходу исполнения произошел какой то сбой (чего быть по идее не должно), то он и восстановиться должен в базе, а на верх только уведомление. там на верху тоже ловят ексепшены и отрабатывают по правилам, но ведь они (программисты на верху) могут и забыть об этом так что чем меньше я им оставлю возможностей для ошибки тем лучше да и в некоторых случаях (как в этом) я делаю обход внутри сервера (СП) не дергаясь каждый раз по сетке. пробежался, что получилось изменить - изменил, остальное (например две транзакции пытаются одни данные обновлять) оставил на потом, по принципуничего страшного, чуть позже доделаю.