IN AUTONOMOUS TRANSACTION
<< FOR SELECT INTO ... DO | FB 2.5 Language Reference | LEAVE >>
IN AUTONOMOUS TRANSACTION
Available in: PSQL
Added in: 2.5
Description
Code running in an autonomous transaction will be committed immediately upon successful completion, regardless of how the parent transaction finishes. This is useful if you want to make sure that certain actions will not be rolled back, even if an error is raised later.
Syntax
IN AUTONOMOUS TRANSACTION DO <psql-statement>
Example
create trigger tr_connect on connect as begin -- make sure log message is always preserved: in autonomous transaction do insert into log (msg) values ('User ' || current_user || ' connects.'); if (current_user in (select username from blocked_users)) then begin -- again, log message must be preserved and event posted, so: in autonomous transaction do begin insert into log (msg) values ('User ' || current_user || ' refused.'); post_event 'Connection attempt by blocked user.'; end -- now we can safely except: exception ex_baduser; end end
Notes:
- Autonomous transactions have the same isolation level as their parent transaction.
- Because the autonomous transaction is completely independent of its parent, care must be taken to avoid deadlocks.
- If an exception occurs within the autonomous transaction, the work will be rolled back.
back to top of page
<< FOR SELECT INTO ... DO | FB 2.5 Language Reference | LEAVE >>