En ocasiones tenemos que utilizar cursores en los programas cobol. En una entrada anterior ya vimos cómo se definían los cursores y cómo se manejaban (pinchar aquí para ver dicha entrada).
También existen los cursores FOR UPDATE. Estos cursores se utilizan cuando queremos seleccionar una serie de filas de una tabla y modificar la información contenida en dichas filas. Así que en esta entrada aprenderemos a declarar y utilizar los cursores for update en un programa cobol.
También existen los cursores FOR UPDATE. Estos cursores se utilizan cuando queremos seleccionar una serie de filas de una tabla y modificar la información contenida en dichas filas. Así que en esta entrada aprenderemos a declarar y utilizar los cursores for update en un programa cobol.
La declaración de un cursor no es más que definir una SELECT a una tabla. Dicha consulta puede devolvernos 0, 1 o más filas; todo depende de si existe en la tabla alguna/s fila/s que cumpla/n o no la cláusula WHERE definida.
Lo primero de todo es definir el cursor en la WORKING-STORAGE SECTION del programa cobol tal y como se indica a continuación:
EXEC SQL
DECLARE CURSOR CUR_TABLA FOR
SELECT CAMPO1,
CAMPO2,
CAMPO3,
CAMPO4
FROM TABLA1
WHERE CAMPO1 = :TABLA1.CAMPO1
FOR UPDATE OF CAMPO2, CAMPO3, CAMPO4
END-EXEC
También declararemos el mismo switch de la entrada anterior, es decir:
01 SW-FIN-CURSOR.
05 SI-FIN-CURSOR PIC X(01) VALUE 'S'.
05 NO-FIN-CURSOR PIC X(01) VALUE 'N'.
Se mantienen las tres operaciones básicas que vimos en la anterior entrada:
- Apertura del cursor: OPEN <Nombre_del_cursor>
- Lectura del cursor: FETCH <Nombre_del_cursor>
- Cierre del cursor: CLOSE <Nombre_del_cursor>
ACTUALIZACION-CURSOR.
EXEC SQL
UPDATE TABLA1
SET CAMPO2 = :UPD-CAMPO2,
CAMPO3 = :UPD-CAMPO3,
CAMPO3 = :UPD-CAMPO4
WHERE CURRENT OF CUR_TABLA
SET CAMPO2 = :UPD-CAMPO2,
CAMPO3 = :UPD-CAMPO3,
CAMPO3 = :UPD-CAMPO4
WHERE CURRENT OF CUR_TABLA
END-EXEC.
IF SQLCODE NOT EQUAL ZEROES
PERFORM FIN-ERR-DB2
END-IF.
Nota: UPD-CAMPO2, UPD-CAMPO3 y UPD-CAMPO4 serán variables previamente declaradas en el programa cobol. Tienen que ser del mismo tipo que los campos CAMPO2, CAMPO3 y CAMPO4 de la tabla TABLA1. Las mencionadas variables deberán contener algún valor válido (espacios o 'CAD' si son alfanuméricos, ceros o 59 si son numéricos, ect).
De este modo no tendríamos que indicarle al UPDATE la clave del registro a actualizar, pues actualizaría el registro recuperado por el FETCH.
De este modo no tendríamos que indicarle al UPDATE la clave del registro a actualizar, pues actualizaría el registro recuperado por el FETCH.
Cuando se realice el PROCESO en el programa cobol, tendremos algo como lo siguiente:
PERFORM APERTURA-CURSOR
PERFORM LECTURA-CURSOR
PERFORM TRATAMIENTO-CURSOR
UNTIL SI-FIN-CURSOR
PERFORM CIERRE-CURSOR
En el párrafo TRATAMIENTO-CURSOR se ejecutará el código que se tenga que ejecutar con el objetivo de tratar la información leída del cursor y por último se ejecutará una lectura del cursor. Es decir, tendríamos algo como lo siguiente:
TRATAMIENTO-CURSOR.
<<Sentencias>>
PERFORM ACTUALIZACION-CURSOR
PERFORM ACTUALIZACION-CURSOR
PERFORM LECTURA-CURSOR.
Esto ha sido todo, espero que te haya servido de ayuda.