Record locking in ABL
- Last Updated: April 22, 2024
- 2 minute read
- OpenEdge
- Version 12.8
- Documentation
Record locking in ABL
When you read records from a database table, the AVM applies a level of locking to the record that you can control so that you can prevent conflicts where multiple users of the same data are trying to read or modify the same records at the same time. This locking does not apply to temp-tables since they are strictly local to a single ABL session and never shared between sessions.
When you read records using a FIND statement,
a FOR EACH block, or the GET
statement on a query that is not being viewed in a browse, by default the AVM reads each
record with a SHARE-LOCK. The SHARE-LOCK means that the AVM marks the record in the database to indicate that
your session is using it. Another user (and the general term user
here and elsewhere means code in any type of OpenEdge session that is accessing data, whether
it is through an actual user interface or not) can also read the same record in the same
way—that is why this is called a SHARE-LOCK.
You can also specify a keyword on your FIND or FOR
EACH statement, or on the OPEN QUERY statement
for a query, to read records with a different lock level. If you
intend to change a record, you can use the EXCLUSIVE-LOCK keyword.
This marks the record as being reserved for your session's exclusive
use where any changes are concerned, including deleting the record.
If any other user has a SHARE-LOCK on the record,
an attempt to read it with an EXCLUSIVE-LOCK fails.
Thus, a SHARE-LOCK assures you that while others
can read the same record you have read, they cannot change it out
from under you.