É o comportamento pretendido que, se eu chamar um stored procedure
dentro de a stored procedure
, será confirmado automaticamente?
exemplo:
pseudo procedimento proc1
create procedure proc1(in var1 int, out var2 int)
begin
start transaction;
-- some code here
commit;
end
pseudo procedimento proc2, aquele irá chamar o proc1
create procedure proc2()
lbl_begin:
begin
start transaction;
-- modify some data here
call proc1(0, var2);
if var != 0 then
rollback;
leave lbl_begin;
end;
commit;
end;
Mesmo que o rollback no proc2 seja executado, os dados modificados antes da chamada do proc1 ainda são confirmados.
É um bug ou é um comportamento pretendido?
-- https://dev.mysql.com/doc/refman/8.0/en/commit.html
e
-- https://dev.mysql.com/doc/refman/8.0/en/implicit-commit.html
Ou seja, o proc2
START
fechado do proc1START
.O primeiro
ROLLBACK
fecha a única transação aberta, portanto, o segundoROLLBACK
não tem nada para "reverter".