Using Transaction Control Methods
You can explicitly control transactions through the following methods:
 
RWDBConnection::beginTransaction()
RWDBConnection::rollbackTransaction()
RWDBConnection::rollbackTransaction(const RWCString& savepoint)
RWDBConnection::commitTransaction()
RWDBConnection::setSavepoint(const RWCString& savepoint)
These methods have straightforward implementations that correspond to OCI calls like OCITransCommit(), OCITransRollback(), and SQL statements.
An application can add the DB Interface Module transaction methods to its code to take explicit control of its transaction blocks. However, transactions may not be nested as this feature is not supported by Oracle.
NOTE: Oracle does not support nested transactions.
The savepoint feature is supported. The savepoint feature allows a current transaction to be partially rolled back to a marked point. The following example demonstrates the use of the savepoint feature and the other transaction processing methods of the DB Interface Module.
 
// Assume we have a table myTable(c int) with no rows in it.
RWDBInserter ins= myTable.inserter();
 
cn1.beginTransaction (); // Begin transaction..
 
(ins << 1).execute(cn1); // First insertion
...
cn1.setSavepoint("svp1"); // Save first insertion
 
(ins << 2).execute(cn1); // Second insertion
(ins << 3).execute(cn1); // Third insertion
 
cn1.rollbackTransaction("svp1"); // Roll back second and
// third insertions
cn1.commitTransaction(); // Commit transaction on
// part that is not rolled back
The above program results in myTable holding one row of data. Its value is 1.