sql >> Database >  >> RDS >> Oracle

Dus hoe verschilt `ROLLBACK` in Oracle exception handler van mijn `ROLLBACK`?

Dit is hoe Oracle werkt. Uw eerste INSERT is correct uitgevoerd (d.w.z. "1" ingevoegd in een tabel).

Vervolgens hebt u een anoniem PL/SQL-blok uitgevoerd dat "3" en vervolgens "2" invoegt en mislukt wanneer u probeert "1" in te voegen vanwege schending van de primaire sleutel.

Als er onverwerkte uitzondering optreedt tijdens de uitvoering van dat PL/SQL-blok (wat u zegt dat "Oracle exception handler rollbacks to here to here"), keert Oracle terug naar het begin van het PL/SQL-blok.

Wanneer u de EXCEPTION-handler gebruikt en ROLLBACK geeft, bent u het die beslist wat te doen als er iets gebeurt, en dat is om alle wijzigingen terug te zetten naar de vorige COMMIT, wat een impliciet uitgevoerde COMMIT was na het uitvoeren van de CREATE TABLE-instructie, dus na INSERT "1 " wordt ook teruggedraaid.



  1. MySQLdb Opgeslagen Procedure Uit Parameter werkt niet

  2. MySQL retourneert de eerste rij van een samengevoegde tabel

  3. MySQL dichte rangorde voor elke groep/partitie

  4. Wilt converteren van tekenformaat naar getalformaat met decimaal