Cursors WITH HOLD

Informix®

Informix closes opened cursors automatically when a transaction ends, unless the WITH HOLD option is used in the DECLARE instruction:
DECLARE c1 CURSOR WITH HOLD FOR SELECT ...
OPEN c1
BEGIN WORK
FETCH c1 ...
COMMIT WORK
FETCH c1 ...
CLOSE c1

SQLite

With SQLite, opened cursors using SELECT statements without a FOR UPDATE clause are not closed when a transaction ends: All SQLite cursors are WITH HOLD cursors unless the FOR UPDATE clause is used in the SELECT statement.

Solution

BDL cursors that are not declared WITH HOLD are automatically closed by the database interface when a COMMIT WORK or ROLLBACK WORK is performed.

Since SQLite automatically closes FOR UPDATE cursors when the transaction ends, opening cursors declared FOR UPDATE and WITH HOLD results in an SQL error that does not normally appear with Informix under the same conditions.

Review the program logic in order to find another way to set locks.