Oracle
 sql >> Database >  >> RDS >> Oracle

Quindi in che modo `ROLLBACK` nel gestore di eccezioni Oracle è diverso dal mio `ROLLBACK`?

Ecco come funziona Oracle. Il tuo primo INSERT è stato eseguito correttamente (cioè inserito "1" in una tabella).

Quindi hai eseguito un blocco PL/SQL anonimo che inserisce "3", quindi "2" e non riesce quando si tenta di inserire "1" a causa di una violazione della chiave primaria.

Se si verifica un'eccezione non gestita durante l'esecuzione di quel blocco PL/SQL (che è ciò che dici "Il gestore delle eccezioni Oracle torna qui"), Oracle torna all'inizio del blocco PL/SQL.

Quando utilizzi il gestore EXCEPTION ed emetti ROLLBACK, sei TU che decidi cosa fare se succede qualcosa, e cioè ripristinare tutte le modifiche al COMMIT precedente che era un COMMIT fatto implicitamente dopo aver eseguito l'istruzione CREATE TABLE, quindi seguendo INSERT "1 " viene eseguito anche il rollback.