




 
The macro 
with-transaction
 executes 
body
 within a transaction for 
database
 (which defaults to *default-database*). The transaction is committed if the body finishes successfully  (without aborting or throwing), otherwise the database is rolled back.
with-transaction
 returns the value or multiple values returned from 
body
.
The following example shows how to use 
with-transaction
 to insert a new record, updates the department number of employes from 40 to 50, and removes employees whose salary is higher than 300,000. If an error occurs anywhere in the body and an 
abort
 or 
throw
 is executed, none of the updates are committed.
(with-transaction
(insert-record :into [emp]
:attributes '(x y z)
:values '(a b c))
(update-records [emp]
:attributes [dept]
:values 50
:where [= [dept] 40])
(delete-records :from [emp]
:where [> [salary] 300000]))