IDENTIFICATION DIVISION. PROGRAM-ID. ROWSET. *================================================================* * PROGRAMA QUE DEVUELVE UNA LISTA DE REGISTROS * *================================================================* ****************************************************************** * *================================================================* * E N V I R O N M E N T D I V I S I O N * *================================================================* * ENVIRONMENT DIVISION. * *===================== CONFIGURATION SECTION. *===================== * SPECIAL-NAMES. DECIMAL-POINT IS COMMA. * *================================================================* * D A T A D I V I S I O N * *================================================================* * DATA DIVISION. * *======================= WORKING-STORAGE SECTION. *======================= * EXEC SQL INCLUDE SQLCA END-EXEC. * 01 WI-INDICES. 05 WI-NUM-ITEM PIC S9(4) COMP VALUE 0. * 01 TBL-FETCH. 05 TBL-CAMPO1 PIC XX OCCURS 100 TIMES. 05 TBL-CAMPO2 PIC XX OCCURS 100 TIMES. 05 TBL-CAMPO3 PIC XX OCCURS 100 TIMES. 05 TBL-CAMPO4 PIC XX OCCURS 100 TIMES. 05 TBL-CAMPO5 PIC XX OCCURS 100 TIMES. 01 HNUM-REGS PIC S9(9) COMP. 01 CLAVE-CAMPO1 PIC XX. * *-> Tabla DB2 : TBPRU01 - COPY CON EL DECLARE DE LA TABLA. EXEC SQL DECLARE CURSOR CUR_TBPRU01 WITH ROWSET POSITIONING FOR SELECT CAMPO1, CAMPO2, CAMPO3, CAMPO4, CAMPO5 FROM TBPRU01 WHERE CAMPO1 = :CLAVE-CAMPO1 ORDER BY CAMPO1 ASC END-EXEC . *=============== LINKAGE SECTION. *=============== * 01 ENTRADA. 05 NUM-REGISTROS PIC 9999. 05 ENT-CAMPO1 PIC XX. 01 SALIDA. 05 SAL-DATOS OCCURS 60 TIMES. 10 SAL-CAMPO1 PIC XX. 10 SAL-CAMPO2 PIC XX. 10 SAL-CAMPO3 PIC XX. 10 SAL-CAMPO4 PIC XX. 10 SAL-CAMPO5 PIC XX. * *================================================================* * P R O C E D U R E D I V I S I O N * *================================================================* * PROCEDURE DIVISION USING ENTRADA SALIDA. * ****************************************************************** * | 0000 - PRINCIPAL * ****************************************************************** 00000-PRINCIPAL. * PERFORM 10000-INICIO * PERFORM 20000-PROCESO * PERFORM 90000-FINAL . ****************************************************************** * | 10000 - INICIO * ****************************************************************** 10000-INICIO. * INITIALIZE SALIDA TBL-FETCH WI-INDICES * IF ENT-CAMPO1 EQUAL SPACES OR LOW-VALUES DISPLAY 'LA CLAVE ESTA VACIA' PERFORM 90000-FINAL END-IF MOVE ENT-CAMPO1 TO CLAVE-CAMPO1 * IF NUM-REGISTROS EQUAL ZEROS OR LOW-VALUES MOVE 60 TO HNUM-REGS ELSE MOVE NUM-REGISTROS TO HNUM-REGS END-IF * PERFORM 20100-OPEN-CURSOR-TBPRU01 * . ****************************************************************** * | 20000 - PROCESO * ****************************************************************** 20000-PROCESO. * PERFORM 20200-FETCH-TBPRU01 * PERFORM UNTIL WI-NUM-ITEM > SQLERRD(3) * PERFORM 20300-MOVER-A-SAL-TABLA * END-PERFORM PERFORM 20400-CLOSE-TBPRU01 * . ****************************************************************** * | 20100 - OPEN - TBPRU01 * * 1| Apertura de la tabla y tratamiento del sqlcode * ****************************************************************** 20100-OPEN-CURSOR-TBPRU01. * EXEC SQL OPEN CUR_TBPRU01 END-EXEC * IF SQLCODE EQUAL ZERO CONTINUE ELSE DISPLAY 'ERROR EN EL OPEN DEL CURSOR. SQLCODE: 'SQLCODE PERFORM 90000-FINAL END-IF * . ****************************************************************** * | 20200 - FETCH - TBPRU01 * ****************************************************************** 20200-FETCH-TBPRU01. * EXEC SQL FETCH NEXT ROWSET CUR_TABLA FOR :HNUM-REGS ROWS INTO :TBL-CAMPO1, :TBL-CAMPO2, :TBL-CAMPO3, :TBL-CAMPO4, :TBL-CAMPO5 END-EXEC * EVALUATE TRUE WHEN SQLCODE = 0 WHEN SQLCODE = 100 AND SQLERRD(3) > 0 CONTINUE WHEN SQLCODE = 100 AND SQLERRD(3) = 0 * Fin de Cursor DISPLAY 'NO HAY DATOS' PERFORM 20400-CLOSE-TBPRU01 PERFORM 90000-FINAL WHEN OTHER * Error al Leer un Cursor DISPLAY 'ERROR EN FETCH CURSOR. SQLCODE: 'SQLCODE PERFORM 20400-CLOSE-TBPRU01 PERFORM 90000-FINAL END-EVALUATE * . * ****************************************************************** * | 20400-MOVER-A-SAL-TABLA * ****************************************************************** 20300-MOVER-A-SAL-TABLA. * MOVE TABLA1-CAMPO1(WI-NUM-ITEM) TO SAL-CAMPO1(WI-NUM-ITEM) MOVE TABLA1-CAMPO2(WI-NUM-ITEM) TO SAL-CAMPO2(WI-NUM-ITEM) MOVE TABLA1-CAMPO3(WI-NUM-ITEM) TO SAL-CAMPO3(WI-NUM-ITEM) MOVE TABLA1-CAMPO4(WI-NUM-ITEM) TO SAL-CAMPO4(WI-NUM-ITEM) MOVE TABLA1-CAMPO5(WI-NUM-ITEM) TO SAL-CAMPO5(WI-NUM-ITEM) . * ****************************************************************** * | 20300 - CLOSE - TBPRU01 * ****************************************************************** 20400-CLOSE-TBPRU01. * EXEC SQL CLOSE CUR_TBPRU01 END-EXEC * IF SQLCODE EQUAL ZERO CONTINUE ELSE DISPLAY 'ERROR EN CLOSE CURSOR. SQLCODE: 'SQLCODE PERFORM 90000-FINAL END-IF * . * ****************************************************************** * | 90000 - FINAL * ****************************************************************** 90000-FINAL. * GOBACK .