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:
Nome | Cognome | Stipendio | Ruolo |
---|---|---|---|
Mario | Rossi | 20000 | Impiegato |
Lucia | Bianchi | 20000 | Impiegato |
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ì:
Nome | Cognome | Stipendio | Ruolo |
---|---|---|---|
Mario | Rossi | 20000 | Impiegato |
Lucia | Bianchi | 20000 | Impiegato |
Carlo | Neri | 35000 | Quadro |
Maria | Viola | 35000 | Quadro |
Marco | Marrone | 25000 | Impiegato |
Ora, se noi ora scrivessimo:
ROLLBACK TO sp1;
avremmo:
Nome | Cognome | Stipendio | Ruolo |
---|---|---|---|
Mario | Rossi | 20000 | Impiegato |
Lucia | Bianchi | 20000 | Impiegato |
Carlo | Neri | 35000 | Quadro |
Se invece scrivessimo:
ROLLBACK TO sp2;
avremmo:
Nome | Cognome | Stipendio | Ruolo |
---|---|---|---|
Mario | Rossi | 20000 | Impiegato |
Lucia | Bianchi | 20000 | Impiegato |
Carlo | Neri | 35000 | Quadro |
Maria | Viola | 35000 | Quadro |
Se invece scrivessimo semplicemente:
ROLLBACK;
l’intera transazione sarebbe annullata, quindi la nostra tabella si presenterebbe così:
Nome | Cognome | Stipendio | Ruolo |
---|---|---|---|
Mario | Rossi | 20000 | Impiegato |
Lucia | Bianchi | 20000 | Impiegato |
Se invece scrivessimo:
COMMIT;
l’intera transazione sarebbe consolidata (committata) e tutti i SAVEPOINT sarebbero rimossi e, quindi, la nostra tabella si presenterebbe così:
Nome | Cognome | Stipendio | Ruolo |
---|---|---|---|
Mario | Rossi | 20000 | Impiegato |
Lucia | Bianchi | 20000 | Impiegato |
Carlo | Neri | 35000 | Quadro |
Maria | Viola | 35000 | Quadro |
Marco | Marrone | 25000 | Impiegato |