Это немного сложно, потому что трудно понять, как отменить все те вещи, которые вы, возможно, сделали, которые нужно отменить. При использовании СУБД START TRANSACTION START помещает небольшой маркер в файл DB, а затем, если что-то не получается, он знает, куда вернуться, до наступления COMMIT, а затем все изменения от START TRANSACTION до COMMIT записываются в камне Объяснение значительно упрощено).
Единственное, что я могу вам помочь, это функции "try", которые будут отлавливать ошибки. В этом случае ваш код будет определять, сколько ему удалось сделать, и как отменить его, прежде чем продолжить.
Если вы помещаете вещи в функции, можно использовать такой тип шаблона:
updatefoo = function(foo){
try(foo2=something(foo));
if the try failed:
return(foo)
else:
return(foo2)
}
[да, это даже не синтаксис R, но вы должны получить картину]
и тогда вы делаете:
foo = updatefoo(foo)
и вы можете быть уверены, что foo не изменится, если что-то пойдет не так в updatefoo ....