This sample program demonstrates the use of cursor operations:
/*------------------------------------------------------*/
/* Declare a cursor that will select 3 columns from any */
/* "broken" (CURRENT <> DESIRED) DB2 regions. */
/*------------------------------------------------------*/
ADDRESS SQL 'DECLARE CSR1 CURSOR FOR',
'SELECT NAME CURRENT_STATE DESIRED_STATE FROM STCTAB',
"WHERE CURRENT_STATE <> DESIRED_STATE AND TYPE = 'DB2'"
IF sqlcode <> 0 THEN CALL SQLERROR /* Check return code!*/
ADDRESS SQL 'OPEN CSR1' /* SQL will now get the data */
IF sqlcode = 100 THEN /* Were any rows selected? */
DO /* No, issue msg & exit */
SAY 'All resources in table are at desired state'
EXIT 0
END
IF sqlcode <> 0 THEN CALL SQLERROR /* Check return code!*/
/*------------------------------------------------------*/
/* Fetch each selected row, one row at a time. */
/*------------------------------------------------------*/
DO WHILE SQLCODE <> 100
ADDRESS SQL 'FETCH CSR1 INTO :NAME, :CURRENT, :DESIRED'
IF sqlcode = 100 THEN LEAVE /* No more rows, done*/
IF sqlcode <> 0 THEN CALL SQLERROR /* Check ret code! */
/* Note that name.1, is returned, not just "name". */
SAY 'NAME='name.1',',
'CURRENT='current.1', DESIRED='desired.1
/*----------------------------------------------------*/
/* If CURRENT_STATE is neither UP nor DOWN, update */
/* this row in the table to set it to UNKNOWN. */
/*----------------------------------------------------*/
IF WORDPOS(current.1,'UP DOWN') = 0 THEN
DO
/* Set host variable. This must be a simple */
/* variable (CURRENT), not a stem (like CURRENT.1)*/
current = 'UNKNOWN'
ADDRESS SQL 'UPDATE STCTAB', /* Perform update*/
'SET CURRENT_STATE = :current',
'WHERE CURRENT OF CSR1'
IF sqlcode <> 0 THEN
CALL SQLERROR /* Check ret code*/
END
END
ADDRESS SQL 'CLOSE CSR1' /* Be sure to close cursor */
EXIT 0
/* Subroutine to display diagnostic data and exit */
SQLERROR:
PARSE SOURCE . . pgm .
SAY 'SQL error in program 'pgm' called from line 'sigl
SAY 'RC='rc', SQLCODE='sqlcode
ADDRESS SQL 'CLOSE CSR1' /* Be sure to close cursor! */
EXIT 12
|
Copyright © 2014 CA.
All rights reserved.
|
|