BEGIN
...
WHEN ANY
END
Откатится то, что под "...", внутри BEGIN..END
Не совсем так
Откатывается только один "целостный" оператор, т.е. блок
Для примера можно проверить (FB2.0):
execute block
returns(res varchar(255))
as
begin
begin
-- begin
insert into T2(ID)
values(1);
exception e_exc;
-- end
when any do
begin end
end
res = 'ROLLBACK!';
select 'NO ROLLBACK!' from T2
where ID = 1
into :res;
suspend;
end
Даёт 'NO ROLLBACK!', при раскоментировании внутреннего блока 'ROLLBACK!'
Не знаю баг это или фича, но наверное логичнее было бы если работал бы вариант указанный WildSery