Macro
sql
with-transaction &key database &body body => result
A database type.
A set of Lisp expressions.
The value returned by body.
with-transaction performs body within a transaction for database (which defaults to*default-database*). The transaction is committed if the body finishes successfully, otherwise the database is rolled back. 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 anabort orthrow 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]))