back to top

Cenni di SQL: i comandi DCL – Guida Oracle

Oggetto di questo capitolo sono invece le istruzioni DCL, ovvero le istruzioni che agiscono sulla transazione. Esse sono del tipo:

  • SAVEPOINT
  • ROLLBACK
  • COMMIT

In Oracle, per transazione si intende una serie di istruzioni SQL che vengono trattate come se fossero una singola unità. Come accennato nel capitolo precedente, Oracle non consolida, ovvero non rende permanenti le modifiche apportate dalle istruzioni di Data Manipulation Language (DML) fino a quando non viene eseguita una istruzione di COMMIT.

In poche parole, quindi, è con la COMMIT che le modifiche effettuate in una transazione diventano permanenti.

La ROLLBACK, invece, effettua l”operazione opposta a quella della COMMIT: essa infatti non fa altro che riportare lo stato del database all”ultima COMMIT eseguita, annullando, in sostanza, tutte le operazioni effettuate dopo quel momento.

La SAVEPOINT serve a specificare uno specifico punto all”interno di una transazione al quale poi sarà possibile effettuare una ROLLBACK.

Per chiarire meglio il funzionamento dei DCL in generale utilizziamo un esempio. Utilizziamo ancora la nostra tabella "Anagrafica". Dopo le ultime modifiche apportate, dovremmo avere una situazione del tipo:

NomeCognomeStipendioRuolo
MarioRossi20000Impiegato
LuciaBianchi20000Impiegato

Supponiamo ora di scrivere ed eseguire la seguente serie di istruzioni:

INSERT 
INTO Anagrafica 
VALUES ('Carlo','Neri',35000,'Quadro');

SAVEPOINT sp1;<br>

INSERT 
INTO Anagrafica 
VALUES ('Maria','Viola',35000,'Quadro');

SAVEPOINT sp2;<br>

INSERT 
INTO Anagrafica 
VALUES ('Marco','Marrone',25000,'Impiegato');

A questo punto, la nostra tabella dovrebbe presentarsi così:

NomeCognomeStipendioRuolo
MarioRossi20000Impiegato
LuciaBianchi20000Impiegato
CarloNeri35000Quadro
MariaViola35000Quadro
MarcoMarrone25000Impiegato

Ora, se noi ora scrivessimo:

ROLLBACK TO sp1;

avremmo:

NomeCognomeStipendioRuolo
MarioRossi20000Impiegato
LuciaBianchi20000Impiegato
CarloNeri35000Quadro

Se invece scrivessimo:

ROLLBACK TO sp2;

avremmo:

NomeCognomeStipendioRuolo
MarioRossi20000Impiegato
LuciaBianchi20000Impiegato
CarloNeri35000Quadro
MariaViola35000Quadro

Se invece scrivessimo semplicemente:

ROLLBACK;

l’intera transazione sarebbe annullata, quindi la nostra tabella si presenterebbe così:

NomeCognomeStipendioRuolo
MarioRossi20000Impiegato
LuciaBianchi20000Impiegato

Se invece scrivessimo:

COMMIT;

l’intera transazione sarebbe consolidata (committata) e tutti i SAVEPOINT sarebbero rimossi e, quindi, la nostra tabella si presenterebbe così:

NomeCognomeStipendioRuolo
MarioRossi20000Impiegato
LuciaBianchi20000Impiegato
CarloNeri35000Quadro
MariaViola35000Quadro
MarcoMarrone25000Impiegato
PubblicitÃ