On Mon, Jul 05, 2004 at 03:38:13PM +1200, Oliver Jowett wrote: > As I just mentioned in another thread, whatever the syntax for nested > transactions I'd like to see plain COMMIT/ABORT/ROLLBACK always affect > the top-level transaction. > > Oracle appears to have: > > SAVEPOINT savepointname > ROLLBACK [WORK] [TO [SAVEPOINT] savepointname]
Right ... this is also what the standard defines. A slight difference from your description is that if one issues ROLLBACK TO savepointname everything from the savepoint is rolled back, but the savepoint itself is kept, so later I can roll back to it again. > One generalization of this to nested transactions would be: > > SUBBEGIN [transactionname] > SUBCOMMIT [transactionname] > SUBABORT [transactionname] The only departure from the SAVEPOINT syntax is that you are able to "subcommit" a savepoint. Not sure how useful that is ... > Active transactions may have names. SUBBEGIN with a name associates the > name with the new transaction; if the name is already in use, it's also > removed from the old transaction. Alternatively we could only look at > the most-deeply-nested transaction with a given name when specifying > transactions by name. Interesting idea ... it's also easier to implement. Also maybe it can be used to simplify life for PL handlers aborting a function. > We could spell SUBBEGIN and friends differently -- is it better to add > more syntax to the existing transaction manipulation commands along the > lines of "BEGIN [NESTED] [TRANSACTION|WORK] [transactionname]", > "ROLLBACK [NESTED] [TRANSACTION|WORK] [transactionname]" etc? Not sure. I already implemented SUBBEGIN. How does that work for everyone? I don't see much value in overloading BEGIN/ROLLBACK. -- Alvaro Herrera (<alvherre[a]dcc.uchile.cl>) "El día que dejes de cambiar dejarás de vivir" ---------------------------(end of broadcast)--------------------------- TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]