Autonomous Transactions

David Clement

September 2004

Oracle versions 7-8


A commit releases row-level locks, which can be a significant performance problem in those cases where more than one process needs to update a row. How, then, can a program release locks without fetching across commits?

One way is to execute autonomous transactions. Oracle allows transactions within PL/SQL routines to commit without any consequences for the parent transaction (although not on the same table, of course) as follows.

          procedure myProcedure 
            (myParameter1 in varchar,
            myParameter2 in number)
          is
            pragma autonomous transaction;
          begin
            update myTable
            set myColumn = myParameter1
            where myKey = myParameter2;
            commit;
          end;
        
The pragma tells Oracle to set up a separate, parallel transaction for the update statement. The row-level lock acquired for that transaction is released with the autonomous commit so it does not prevent any other processes from updating the table myTable.