Рассмотрим следующий псевдокод:
Код: Выделить всё
std::vector queries;
queries.push_back( "CREATE TABLE X1();" );
queries.push_back( "CREATE TABLE X2();" );
queries.push_back( "CREATE TABLE X3();" );
queries.push_back( "INSERT INTO X! VALUES();" );
queries.push_back( "INSERT INTO X1 VALUES();" );
queries.push_back( "INSERT INTO X2 VALUES();" );
queries.push_back( "INSERT INTO X2 VALUES();" );
queries.push_back( "INSERT INTO X3 VALUES();" );
queries.push_back( "INSERT INTO X3 VALUES();" );
for( std::vector::iterator it = queries.begin(); it < queries.end(); ++ it )
{
res = execute( (*it) );
if( failure )
break;
}
Однако, если вторая или третья команда не удалась - я бы хотел удалить все ранее созданные таблицы, исследовать их и затем начать заново, поскольку продолжать не имеет особого смысла из-за логики программы.
Насколько я знаю, только SQLite поддерживает транзакционный DDL.
Итак, как люди справляются с такими ситуациями, как это?
TIA!!
Приведенный выше фрагмент представляет собой псевдокод, поскольку он не зависит от СУБД, и вопрос очень общий..
Подробнее здесь: https://stackoverflow.com/questions/798 ... on-failure
Мобильная версия