IBSurgeon library

Firebird 2.5: Autonomous Transactions

Function:

Runs a piece of code in an autonomous (independent) transaction. It’s useful in cases where you

need to raise an exception but do not want the database changes to be rolled-back.

If exceptions are raised inside the body of an autonomous transaction block, the changes are

rolled-back. If the block runs till the end, the transaction is committed.

The new transaction is initiated with the same isolation level of the existing one.

Should be used with caution to avoid deadlocks.

Author:

Adriano dos Santos Fernandes

Syntax:

in autonomous transaction

do

Example:

create table log (

“date” timestamp,

msg varchar(60)

);

create exception e_conn ‘Connection rejected’;

set term !;

create trigger t_conn on connect

as

begin

if (current_user = ‘BAD_USER’) then

begin

in autonomous transaction

do

begin

insert into log (“date”, msg) values (current_timestamp, ‘Connection rejected’);

end

exception e_conn;

end

end!

set term ;!