sql >> Base de Datos >  >> RDS >> Oracle

Entonces, ¿en qué se diferencia `ROLLBACK` en el controlador de excepciones de Oracle de mi `ROLLBACK`?

Así es como funciona Oracle. Su primer INSERT se realizó correctamente (es decir, insertó "1" en una tabla).

Luego ejecutó un bloque PL/SQL anónimo que inserta "3", luego "2" y falla al intentar insertar "1" debido a una violación de la clave principal.

Si se produce una excepción no controlada durante la ejecución de ese bloque PL/SQL (que es lo que dice que "el controlador de excepciones de Oracle retrocede hasta aquí"), Oracle retrocede hasta el principio del bloque PL/SQL.

Cuando utiliza el controlador EXCEPTION y emite ROLLBACK, entonces es USTED quien decide qué hacer si algo sucede, y eso es revertir todos los cambios a COMMIT anterior, que fue un COMMIT realizado implícitamente después de ejecutar la declaración CREATE TABLE, por lo que después de INSERT "1 " también se revierte.