Показать сообщение отдельно
Старый 18.09.2003, 11:06   #1  
Andronov is offline
Andronov
Участник
 
108 / 10 (1) +
Регистрация: 10.11.2002
Адрес: г. Пермь
Вопрос про транзакции и исключения
Добрый день!
В документации написано:
1. Блоки транзакций могут быть вложенными
2. Исключение автоматически прерывает текущую транзакцию
Исходя из этого я написал такой код:
PHP код:
        CanPerform false;
        
ttsbegin;
        try {
            
ttsbegin;
                
select forupdate mt where mt.Name == 'ООО "Электролюкс"';
                
mt.Name 'First updated record';
                
mt.update();
                if (!
CanPerform)
                    throw 
Exception::Error;
            
ttscommit;
        }
        catch (
Exception::Error){
            
CanPerform true;
        }

        
select forupdate mt where mt.Name == 'ООО "Мирный атом"';
        
mt.Name 'Second updated record';
        
mt.update();
    
ttscommit
Писал исключительно для примера, поэтому логику прошу не обсуждать. Имел ввиду, что транзакция в try/catch откатится и управление перейдет в catch-блок, потом оставшиеся операторы нормально выполнятся и внешняя транзакция успешно завершится. Практика показала, что в базе не происходит НИКАКИХ изменений.
Может мне кто-нибудь объяснить ход выполнения программы? Почему изменения не проходят в базу? В модели MTS/Component services используется подход, очень похожий на аксаптовский, но там подобный код будет отрабатывать именно так, как я того ожидаю.