PL / SQL - Transazioni

In questo capitolo, discuteremo le transazioni in PL / SQL. Un databasetransactionè un'unità di lavoro atomica che può essere costituita da una o più istruzioni SQL correlate. È chiamato atomico perché le modifiche al database apportate dalle istruzioni SQL che costituiscono una transazione possono essere collettivamente impegnate, cioè rese permanenti al database o annullate (annullate) dal database.

Un'istruzione SQL eseguita con successo e una transazione confermata non sono la stessa cosa. Anche se un'istruzione SQL viene eseguita correttamente, a meno che non venga eseguito il commit della transazione contenente l'istruzione, è possibile eseguire il rollback e tutte le modifiche apportate dalle istruzioni possono essere annullate.

Avvio e conclusione di una transazione

Una transazione ha un'estensione beginning e un end. Una transazione inizia quando si verifica uno dei seguenti eventi:

  • La prima istruzione SQL viene eseguita dopo la connessione al database.

  • Ad ogni nuova istruzione SQL emessa dopo il completamento di una transazione.

Una transazione termina quando si verifica uno dei seguenti eventi:

  • UN COMMIT o a ROLLBACK viene emessa una dichiarazione.

  • UN DDL dichiarazione, come CREATE TABLEdichiarazione, viene emessa; perché in quel caso viene eseguito automaticamente un COMMIT.

  • UN DCL dichiarazione, come un GRANTdichiarazione, viene emessa; perché in quel caso viene eseguito automaticamente un COMMIT.

  • L'utente si disconnette dal database.

  • L'utente esce da SQL*PLUS emettendo il EXIT comando, viene eseguito automaticamente un COMMIT.

  • SQL * Plus termina in modo anomalo, a ROLLBACK viene eseguito automaticamente.

  • UN DMLdichiarazione fallisce; in tal caso viene eseguito automaticamente un ROLLBACK per annullare tale istruzione DML.

Commettere una transazione

Una transazione viene resa permanente mediante l'emissione del comando SQL COMMIT. La sintassi generale per il comando COMMIT è:

COMMIT;

Per esempio,

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (3, 'kaushik', 23, 'Kota', 2000.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (6, 'Komal', 22, 'MP', 4500.00 ); 

COMMIT;

Rollback delle transazioni

Le modifiche apportate al database senza COMMIT potrebbero essere annullate utilizzando il comando ROLLBACK.

La sintassi generale per il comando ROLLBACK è:

ROLLBACK [TO SAVEPOINT < savepoint_name>];

Quando una transazione viene interrotta a causa di una situazione senza precedenti, come un errore di sistema, l'intera transazione dal momento che un commit viene automaticamente annullato. Se non stai usandosavepoint, quindi usa semplicemente la seguente istruzione per ripristinare tutte le modifiche:

ROLLBACK;

Punti di salvataggio

I punti di salvataggio sono una sorta di indicatori che aiutano a suddividere una lunga transazione in unità più piccole impostando alcuni punti di controllo. Impostando i punti di salvataggio all'interno di una transazione lunga, è possibile eseguire il rollback a un punto di controllo, se necessario. Questo viene fatto emettendo ilSAVEPOINT comando.

La sintassi generale per il comando SAVEPOINT è:

SAVEPOINT < savepoint_name >;

Per esempio

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (7, 'Rajnish', 27, 'HP', 9500.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (8, 'Riddhi', 21, 'WB', 4500.00 ); 
SAVEPOINT sav1;
  
UPDATE CUSTOMERS 
SET SALARY = SALARY + 1000; 
ROLLBACK TO sav1;
  
UPDATE CUSTOMERS 
SET SALARY = SALARY + 1000 
WHERE ID = 7; 
UPDATE CUSTOMERS 
SET SALARY = SALARY + 1000 
WHERE ID = 8; 

COMMIT;

ROLLBACK TO sav1 - Questa istruzione ripristina tutte le modifiche fino al punto in cui avevi contrassegnato savepoint sav1.

Successivamente, inizieranno le nuove modifiche apportate.

Controllo automatico delle transazioni

Per eseguire un file COMMIT automaticamente ogni volta che un file INSERT, UPDATE o DELETE comando viene eseguito, è possibile impostare il AUTOCOMMIT variabile d'ambiente come -

SET AUTOCOMMIT ON;

È possibile disattivare la modalità di commit automatico utilizzando il seguente comando:

SET AUTOCOMMIT OFF;