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

Então, como o `ROLLBACK` no manipulador de exceção do Oracle é diferente do meu `ROLLBACK`?


É assim que a Oracle funciona. Seu primeiro INSERT foi feito corretamente (ou seja, inseriu "1" em uma tabela).

Em seguida, você executou um bloco PL/SQL anônimo que insere "3", depois "2" e falha ao tentar inserir "1" devido à violação de chave primária.

Se ocorrer uma exceção não tratada durante a execução desse bloco PL/SQL (que é o que você diz que "O manipulador de exceção Oracle reverte para aqui"), o Oracle reverte para o início do bloco PL/SQL.

Quando você utiliza o manipulador EXCEPTION e emite ROLLBACK, então é VOCÊ quem decide o que fazer se algo acontecer, e isso é reverter todas as alterações no COMMIT anterior, que foi um COMMIT feito implicitamente após a execução da instrução CREATE TABLE, seguindo INSERT "1 " também é revertido.