SELECT … FOR UPDATE
Informix®
Legacy BDL programs typically use a cursor with SELECT FOR UPDATE to implement
pessimistic locking and avoid several users editing the same rows:
DECLARE cc CURSOR FOR
SELECT ... FROM tab WHERE ... FOR UPDATE
OPEN cc
FETCH cc <-- lock is acquired
...
CLOSE cc <-- lock is released
The row must be fetched in order to set the lock.
If the cursor is local to a transaction, the lock is released when the transaction ends. If the
cursor is declared WITH HOLD, the lock is released when the cursor is closed.
SET LOCK MODE
instruction to define the lock wait
timeout:SET LOCK MODE TO { WAIT | NOT WAIT | WAIT seconds }The
default mode is NOT WAIT.SAP HANA®
SAP HANA supports SELECT FOR UPDATE.
SAP HANA releases locks when the transaction ends (at
COMMIT WORK or ROLLBACK WORK).
SELECT FOR UPDATE, all rows of the result set will get an
exclusive lock when the cursor is opened.SET
LOCK MODE TO NOT WAIT:
SET TRANSACTION LOCK WAIT TIMEOUT millisecondsSolution
The database interface is based on an emulation of an Informix engine using transaction logging. Therefore, opening a SELECT ... FOR
UPDATE cursor declared outside a transaction will raise an SQL error -255 (not in
transaction).
If the program is doing a SET LOCK MODE instruction, it
will be converted to a SET TRANSACTION LOCK WAIT TIMEOUT command by the
database interface.
FETCH time.