Для такого кода
PHP код:
try
{
ttsbegin;
try
{
ttsbegin;
select forupdate aa where aa.a == 9;
aa.b = 1;
aa.update();
info("До error");
throw Exception::error;
info("После error");
ttscommit;
}
catch (Exception::Error)
{
info("catch 1");
}
info("После catch");
select forupdate aa where aa.a == 9;
aa.b = 2;
aa.update();
ttscommit;
info("После ttscommit");
}
catch (Exception::Error)
{
info("catch 2");
}
info("После всего");
получается следущее
До error
catch 2
После всего
Т.е. управление передается в catch, который следует за блоком try, в котором была открыта первая транзакция.