Cursor Without Hold
Cursor Without Hold
The COMMIT or SYNCPOINT commands will close all opened cursors when they are executed. While declaring the cursor, the WITH HOLD option is used to avoid the above issue.
The cursor will close automatically if the WITH HOLD option is not coded. These cursors are called cursors WITHOUT HOLD. WITHOUT HOLD option is the default, and there is no need to code explicitly.
Syntax -
EXEC SQL DECLARE cursor-name [WITHOUT HOLD] CURSOR FOR select-statement END-EXEC.
WITHOUT HOLD -
- Specifies the cursor can close when the COMMIT or SYNCPOINT executed.
Example -
Input -

Scenario1 - Declare the WITHOUT HOLD CURSOR for updating all columns of the employee_details table.
Code -
...
EXEC SQL
DECLARE E1 CURSOR WITHOUT HOLD FOR
SELECT EMP_NAME,
MANAGER_ID
FROM EMPLOYEE_DETAILS
FOR UPDATE OF MANAGER_ID
END-EXEC.
...
Scenario2 - Declare the WITHOUT HOLD CURSOR for updating all columns of the employee_details table.
Code -
...
EXEC SQL
DECLARE E2 CURSOR FOR
SELECT EMP_ID,
EMP_NAME,
DESIGNATION,
MANAGER_ID,
DATE_OF_HIRE,
SALARY,
DEPT_ID
FROM EMPLOYEE_DETAILS
FOR UPDATE
END-EXEC.
...