Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Usando transações aninhadas no oracle


O Oracle não oferece suporte a transações aninhadas. Se uma transação for confirmada, ela será confirmada. É por isso que você geralmente não deseja confirmar (ou reverter) uma transação em um procedimento armazenado, o que dificulta a reutilização do procedimento em outro lugar se a semântica da transação for diferente.

Você pode, no entanto, declarar um ponto de salvamento no início de seu procedimento e reverter para esse ponto de salvamento no caso de um erro. Se você remover o commit, a transação será controlada exclusivamente pelo código do aplicativo e não pelo código do banco de dados
begin
  savepoint beginning_of_proc;

  insert/update/delete...

exception 
  when OTHERS then 
    rollback to beginning_of_proc;
    raise;
end;

Nesse caso, porém, meu viés seria não ter um ponto de salvamento no código, não ter um rollback e não capturar a exceção, a menos que você esteja fazendo algo útil com isso. Basta fazer o DML, deixar quaisquer exceções serem lançadas e tratá-las em seu aplicativo.