Cursors WITH HOLD
Informix®
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 c1PostgreSQL
With PostgreSQL, opened cursors using SELECT statements without a FOR
UPDATE clause are not closed when a transaction ends. All PostgreSQL cursors are
WITH HOLD cursors, unless the FOR UPDATE clause issued in the
SELECT statement.
Cursors declared FOR UPDATE and using the WITH HOLD option
cannot be supported with PostgreSQL because FOR UPDATE cursors are automatically
closed by PostgreSQL when the transaction ends.
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 PostgreSQL automatically closes FOR UPDATE cursors when the transaction
ends, opening cursors declared FOR UPDATE and the WITH HOLD option
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.