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.
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]))