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 c1
Oracle® MySQL and MariaDB
With MySQL and MariaDB, opened cursors using SELECT
statements without a
FOR UPDATE
clause are not closed when a transaction ends. All MySQL cursors are
WITH HOLD
cursors, unless the FOR UPDATE
clause is used in the
SELECT
statement.
Cursors declared FOR UPDATE
and using the WITH HOLD
option
cannot be supported with MySQL because FOR UPDATE
cursors are automatically closed
by MySQL 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 MySQL automatically closes FOR UPDATE
cursors when the transaction ends,
opening cursors declared FOR UPDATE
and WITH HOLD
option results
in an SQL error; in the same conditions, this does not normally appear with Informix.
Review the program logic in order to find another way to set locks.