PL/SQL - Transactions

A database transaction is an atomic unit of work that may consist of one or more related SQL statements. It is called atomic because the database modifications brought about by the SQL statements that constitute a transaction can collectively be either committed, i.e., made permanent to the database or rolled back (undone) from the database.

A successfully executed SQL statement and a committed transaction are not same. Even if an SQL statement is executed successfully, unless the transaction containing the statement is committed, it can be rolled back and all changes made by the statement(s) can be undone.

Starting an Ending a Transaction

A transaction has a beginning and an end. A transaction starts when one of the following events take place:

The first SQL statement is performed after connecting to the database.

At each new SQL statement issued after a transaction is completed.

A transaction ends when one of the following events take place:

A COMMIT or a ROLLBACK statement is issued.

A DDL statement, like CREATE TABLE statement, is issued; because in that case a COMMIT is automatically performed.

A DCL statement, such as a GRANT statement, is issued; because in that case a COMMIT is automatically performed.

User disconnects from the database.

User exits from SQL*PLUS by issuing the EXIT command, a COMMIT is automatically performed.

Rolling Back Transactions

Changes made to the database without COMMIT could be undone using the ROLLBACK command.

The general syntax for the ROLLBACK command is:

ROLLBACK [TO SAVEPOINT < savepoint_name>];

When a transaction is aborted due to some unprecedented situation, like system failure, the entire transaction since a commit is automatically rolled back. If you are not using savepoint, then simply use the following statement to rollback all the changes:

ROLLBACK;

Savepoints

Savepoints are sort of markers that help in splitting a long transaction into smaller units by setting some checkpoints. By setting savepoints within a long transaction, you can roll back to a checkpoint if required. This is done by issuing the SAVEPOINT command.