2015-03-10 2 views
0

Возможно ли иметь транзакцию, совершить транзакцию, совершить транзакцию, и если в этой 2-й транзакции произошла ошибка, возможно ли откат обеих транзакций?cfml транзакция фиксация отката другая транзакция

Смотри ниже:

transaction action="begin" { 
    transaction action="SetSavepoint" savepoint="sp1"; 

    try { 
     .. do something ... 
     transactionCommit(); 
    } 
    catch (any, e) { 
    transactionRollback("sp1"); 
    } 
} 

transaction action="begin" { 
    transaction action="SetSavepoint" savepoint="sp2"; 

    try { 
     .. do something ... 
     transactionCommit(); 
    } 
    catch (any, e) { 
    transactionRollback("sp1"); 
    transactionRollback("sp2"); 
    } 
} 
+0

Не знаете, как работает CFML, но вы можете только одну транзакцию открытой в то время. Я подозреваю, что после завершения транзакции action = "begin" 'транзакция завершается. –

+0

@ColonelThirtyTwo - FWIW, CFML просто пересылает команды sql в базу данных для выполнения. Таким образом, поведение такое же, как если бы вы выдавали одни и те же команды, то есть 'begin transaction, rollback, commit, ....' непосредственно в базе данных. – Leigh

+0

Я обнаружил, что cftransaction является рискованным, у меня были случаи, когда перезапуск/тайм-аут сервера cfml оставил открытую транзакцию открытой. Блок cfcatch не помог бы в этих случаях. Теперь мы помещаем наш SQL в хранимые процедуры. Или напрямую выпишите транзакции с использованием и используйте собственные команды транзакций. Таким образом, код commit, rollback и т. Д. Отправляется на SQL Server в одном пакете, гарантируя отсутствие приостановленных транзакций. Например, при использовании MS-SQL Server вы можете установить точки сохранения таким образом. –

ответ

0

№ А фиксации транзакции является окончательным. Его нельзя отбросить назад.

Помните, что единственная роль CF заключается в том, чтобы пересылать команды sql в ваши dbms. База данных делает все остальное. Поэтому, если у вас есть вопросы о поведении конкретной операции sql, вы должны проконсультироваться с вашей документацией по базе данных. Например:

+0

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