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 c1ORACLE
With ORACLE, opened cursors using SELECT statements without a FOR
UPDATE clause are not closed when a transaction ends: All ORACLE 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 ORACLE 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.