Re: when any do - он что откатыва ет

2010-09-23 Пенетрантность Качановский Дмитрий
Я еще раз дико извиняюсь, может еще подскажите, а то сам что то найти не 
могу.


очень хочу текст ошибки получить
т.е. если происходит ексепшен, что бы можно было в лог сохранить, что 
именно там произошло, а позже в спокойной обстановке анализировать.


может подскажите как (или носом ткнете, где это написано), а то как то 
сам никак не найду, возможно ли такое вообще




Re: when any do - он что откатыва ет

2010-09-21 Пенетрантность Dmitry Yemanov

21.09.2010 11:17, Качановский Дмитрий пишет:


Добрый всем день
тут уперся в такой вот момент
есть процедура примерно такого вида

begin
insert...
update...
...
insert... -- вот здесь происходит ошибка
when any do begin and
end

я почему то был уверен, что все операции, которые выполнялись до
сбойного статмента (в пределах блока begin end) будут отменены


Если нет WHEN, то отменены будут все. Иначе только сбойный.


но на тестах сейчас получил, что откатился только сам статмент
все остальные изменения были приняты

т.е., это я глубоко заблуждался?


Так точно. Там еще много нюансов, о которых ты не в курсе.


--
Дмитрий Еманов



Re: when any do - он что откатыва ет

2010-09-21 Пенетрантность Качановский Дмитрий

Если нет WHEN, то отменены будут все. Иначе только сбойный.


все отменены могут быть только если роллбак сделал
или я снова ошибаюсь




но на тестах сейчас получил, что откатился только сам статмент
все остальные изменения были приняты

т.е., это я глубоко заблуждался?


Так точно. Там еще много нюансов, о которых ты не в курсе.



возможно

но если не против задам тогда такой вопрос, может подскажете
есть операции которые выполняются в цикле
на каждом шаге может произойти сбой (на одном шаге более одной операции)
если это происходит надо откатить именно этот шаг и идти дальше

почему то в свое время прочитав описание этого оператора в книге Х.Борри 
я решил, что именно таким образом могу решить эту проблему

видимо что то не так понял

а можно ли как то подругому, не откатывая всю транзакцию и не покидая 
текущей процедуры откатить блок операций?




Re: when any do - он что откатыва ет

2010-09-21 Пенетрантность Качановский Дмитрий

Качановский Дмитрий пишет:


а можно ли как то подругому, не откатывая всю транзакцию и не покидая 
текущей процедуры откатить блок операций?



дополню свой вопрос, если заверну все операции одного шага в процедуру - 
это что-то меняет?




Re: when any do - он что откатыва ет

2010-09-21 Пенетрантность Dmitry Yemanov

21.09.2010 12:19, Качановский Дмитрий пишет:


Если нет WHEN, то отменены будут все. Иначе только сбойный.


все отменены могут быть только если роллбак сделал
или я снова ошибаюсь


Все в пределах begin/end блока.


есть операции которые выполняются в цикле
на каждом шаге может произойти сбой (на одном шаге более одной операции)
если это происходит надо откатить именно этот шаг и идти дальше


Попробуй так:

begin
  begin
шаг
  end
when any do begin end
end


--
Дмитрий Еманов



Re: when any do - он что откатыва ет

2010-09-21 Пенетрантность Качановский Дмитрий

Dmitry Yemanov пишет:

21.09.2010 12:19, Качановский Дмитрий пишет:


Если нет WHEN, то отменены будут все. Иначе только сбойный.


все отменены могут быть только если роллбак сделал
или я снова ошибаюсь


Все в пределах begin/end блока.


ну да именно так там и было написано, но или я неправильно это понимаю, 
или что то не так делаю, поскольку у меня результат предыдущих 
операторов сохраняется.





есть операции которые выполняются в цикле
на каждом шаге может произойти сбой (на одном шаге более одной операции)
если это происходит надо откатить именно этот шаг и идти дальше


Попробуй так:

begin
  begin
шаг
  end
when any do begin end
end



поробовал
пока результат тот же
может конечно сработал кеш метаданных и отрабатывает предыдущая версия, 
но вроде переконнекчивался, так что не должен бы.




Re: when any do - он что откатыва ет

2010-09-21 Пенетрантность Качановский Дмитрий

приношу извинения, вроде заработало

наверное я все-таки неправильно понял эту фразу

вообщем пошел тестировать дальше

спасибо



Re: when any do - он что откатыва ет

2010-09-21 Пенетрантность Качановский Дмитрий

Sergey Mereutsa пишет:

Привет!


Если нет WHEN, то отменены будут все. Иначе только сбойный.


Тут все большие, так что Дим, ты уточняй, что сохранены они будут если
не делать явной отмены транзакции, а просто подтверждать её.
Но если анализировать ошибку снаружи вызова и делать откат - то волосы
будут мягкими и шелковистыми.



в том то и дело, что я не хочу что бы ее анализировали снаружи (моя 
часть только база), я хочу что бы наверх отдавался только какой-то код.
А если по ходу исполнения произошел какой то сбой (чего быть по идее не 
должно), то он и восстановиться должен в базе, а на верх только уведомление.


там на верху тоже ловят ексепшены и отрабатывают по правилам, но ведь 
они (программисты на верху) могут и забыть об этом


так что чем меньше я им оставлю возможностей для ошибки тем лучше

да и в некоторых случаях (как в этом) я делаю обход внутри сервера (СП) 
не дергаясь каждый раз по сетке. пробежался, что получилось изменить - 
изменил, остальное (например две транзакции пытаются одни данные 
обновлять) оставил на потом, по принципуничего страшного, чуть позже 
доделаю.