Transaction Control v10
There may be circumstances where it is desired that all updates to a database are to occur successfully, or none are to occur at all if any error occurs. A set of database updates that are to all occur successfully as a single unit, or are not to occur at all, is said to be a transaction.
A common example in banking is a funds transfer between two accounts. The two parts of the transaction are the withdrawal of funds from one account, and the deposit of the funds in another account. Both parts of this transaction must occur otherwise the bank’s books will be out of balance. The deposit and withdrawal are one transaction.
An SPL application can be created that uses a style of transaction control compatible with Oracle databases if the following conditions are met:
edb_stmt_level_txparameter must be set to
TRUE. This prevents the action of unconditionally rolling back all database updates within the
BEGIN/ENDblock if any exception occurs.
- The application must not be running in autocommit mode. If autocommit mode is on, each successful database update is immediately committed and cannot be undone. The manner in which autocommit mode is turned on or off is application dependent.
A transaction begins when the first SQL command is encountered in the SPL program. All subsequent SQL commands are included as part of that transaction. The transaction ends when one of the following occurs:
- An unhandled exception occurs in which case the effects of all database updates made during the transaction are rolled back and the transaction is aborted.
COMMITcommand is encountered in which case the effect of all database updates made during the transaction become permanent.
ROLLBACKcommand is encountered in which case the effects of all database updates made during the transaction are rolled back and the transaction is aborted. If a new SQL command is encountered, a new transaction begins.
- Control returns to the calling application (such as Java, PSQL, etc.) in which case the action of the application determines whether the transaction is committed or rolled back.
Unlike Oracle, DDL commands such as
CREATE TABLE do not implicitly occur within their own transaction. Therefore, DDL commands do not automatically cause an immediate database commit as in Oracle, and DDL commands may be rolled back just like DML commands.
A transaction may span one or more
BEGIN/END blocks, or a single
BEGIN/END block may contain one or more transactions.
The following sections discuss the
ROLLBACK commands in more detail.