REF. PROBLEMA EN COMPILACION PROG. COBOL MANTENCIÓN DE ARCHIVO VSAM
Presente
Me encuentro revisando el sgte ejercicio que se indica en la referencia
(detalle a Continuación), Al Compilar la Instrucción relacionada con el DELETE
del Registro me arroja el Sgte Error:
..... (**)
*-------------
2200-BAJA-VSAM.
*-------------
DELETE REG-VSAM (*)
(**) IGYPS2074-S "REG-VSAM" was defined as a type that was invalid
in thype that was invalid in this context. The statement was discarded.
Detalle del Programa.
'-------------------
Código: Seleccionar todo
IDENTIFICATION DIVISION.
PROGRAM-ID. PROG010.
AUTHOR. ALDO RODRIGUEZ VERA.
*============================================*
* PROGRAMA LEE ARCHIVO VSAM *
*============================================*
*
ENVIRONMENT DIVISION.
*
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
*
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT ENTRADA0 ASSIGN TO ENTRADA0
FILE STATUS IS FS-ENTRADA0.
SELECT ENTRADA1 ASSIGN TO ENTRADA1
FILE STATUS IS FS-ENTRADA1.
SELECT SALIDA ASSIGN TO SALIDA
ORGANIZATION IS INDEXED
ACCESS MODE IS RANDOM
RECORD KEY IS CLAVE-OFICVSM
FILE STATUS IS FS-SALIDA.
*
DATA DIVISION.
*
FILE SECTION.
*
**** FICHEROS DE ENTRADA ****
*
**--> OFICINAS VERSION 0 (FICHERO SECUENCIAL)
FD ENTRADA0
LABEL RECORD STANDARD
RECORDING MODE IS F
BLOCK CONTAINS 0 RECORDS.
01 REG-ENTRADA0 PIC X(52).
*
*--> OFICINAS VERSION -1 (FICHERO SECUENCIAL)
FD ENTRADA1
LABEL RECORD STANDARD
RECORDING MODE IS F
BLOCK CONTAINS 0 RECORDS.
01 REG-ENTRADA1 PIC X(52).
**** FICHERO DE ENTRADA - SALIDA ****
*
*--> OFICINAS (FICHERO VSAM)
FD SALIDA.
01 REG-VSAM.
05 CLAVE-OFICVSM PIC X(08).
05 RESTO-OFICVSM PIC X(44).
*
**********************************************
*
WORKING-STORAGE SECTION.
*
*--------------------------------------------
*--- AREA DE COPYS ---*
*---------------------------------------------
*
*--------------- COPY FICHERO OFICINAS ------------
COPY COFICINA.
COPY COFICINA REPLACING CSAM-COFICINA BY ==ENT-V0==.
*
COPY COFICINA REPLACING CSAM-COFICINA BY ==ENT-V1==.
*
*--------------------------------------------------
* AREA DE SWITCHES
*-------------------------------------------------
*--> FINAL FICHERO OFICINAS VERSION 0
01 WS-FIN-ENTRADA0 PIC X(1) VALUE 'N'.
88 FIN-ENTRADA0 VALUE 'S'.
*--> FINAL FICHERO OFICINAS VERSION 1
01 WS-FIN-ENTRADA1 PIC X(1) VALUE 'N'.
88 FIN-ENTRADA1 VALUE 'S'.
*------------------------------------------------
* CODIGOS DE ESTADO DE FICHEROS
*-------------------------------------------------
* FILE STATUS
01 FS-STATUS.
05 FS-ENTRADA0 PIC X(2).
88 FS-ENTRADA0-OK VALUE '00'.
88 FS-ENTRADA0-EOF VALUE '10'.
05 FS-ENTRADA1 PIC X(2).
88 FS-ENTRADA1-OK VALUE '00'.
88 FS-ENTRADA1-EOF VALUE '10'.
05 FS-SALIDA PIC X(2).
88 FS-SALIDA-OK VALUE '00'.
*----------------------------------------------------
* REGISTROS LEIDOS - GRABADOS - BORRADOS - MODIFICADOS
*----------------------------------------------------
01 WS-PROCESADOS.
03 REG-LEIDOS-EN0 PIC 9(09) VALUE ZEROS.
03 REG-LEIDOS-EN1 PIC 9(09) VALUE ZEROS.
03 REG-GRABADOS-VSAM PIC 9(09) VALUE ZEROS.
03 REG-BORRADOS-VSAM PIC 9(09) VALUE ZEROS.
03 REG-MODIF-VSAM PIC 9(09) VALUE ZEROS.
*
PROCEDURE DIVISION.
*
************************************************************
* | 0000 - PRINCIPAL
*--|------------------+----------><----------+-------------*
* 1| EJECUTA EL INICIO DEL PROGRAMA
* 2| EJECUTA EL PROCESO DEL PROGRAMA
* 3| EJECUTA EL FINAL DEL PROGRAMA
************************************************************
0000-PRINCIPAL.
PERFORM 1000-INICIO
PERFORM 2000-PROCESO
UNTIL FIN-ENTRADA0 AND FIN-ENTRADA1.
PERFORM 3000-FINAL.
*-----------
1000-INICIO.
*-----------
PERFORM 1100-ABRIR-FICHEROS
*
*--> LEEMOS PRIMERA OFICINA
PERFORM 1101-LEER-ENTRADA0.
PERFORM 1102-LEER-ENTRADA1.
*---------------
2000-PROCESO.
*---------------
EVALUATE TRUE
WHEN CSAM-CLAVE OF ENT-V0
EQUAL CSAM-CLAVE OF ENT-V1
IF ENT-V0 NOT EQUAL ENT-V1
*---------> ACTUALIZAR CLAVE EN FICHERO VSAM
MOVE ENT-V0 TO REG-VSAM
PERFORM 2100-MODIFICAR-VSAM
END-IF
PERFORM 1101-LEER-ENTRADA0
PERFORM 1102-LEER-ENTRADA1
WHEN CSAM-CLAVE OF ENT-V0 GREATER THAN
CSAM-CLAVE OF ENT-V1
*---------> DAR DE BAJA CLAVE DE V1 EN FICHERO VSAM
MOVE CSAM-CLAVE OF ENT-V1
TO CLAVE-OFICVSM
PERFORM 2200-BAJA-VSAM
PERFORM 1102-LEER-ENTRADA1
WHEN CSAM-CLAVE OF ENT-V0 LESS THAN
CSAM-CLAVE OF ENT-V1
*---------> DAR DE ALTA LA CLAVE DE V0 EN FICHERO VSAM
MOVE ENT-V0 TO REG-VSAM
PERFORM 2300-ALTA-VSAM
PERFORM 1101-LEER-ENTRADA0
END-EVALUATE.
*-----------
3000-FINAL.
*-----------
PERFORM 3010-CERRAR-FICHEROS.
PERFORM 3020-ESTADISTICAS.
STOP RUN.
*-----------------------
1100-ABRIR-FICHEROS.
*-----------------------
OPEN INPUT ENTRADA0
ENTRADA1
I-O SALIDA.
IF NOT FS-ENTRADA0-OK
DISPLAY 'ERROR EN ABRIR-ENTRADA0'
DISPLAY 'FILE-STATUS = ' FS-ENTRADA0
END-IF.
IF NOT FS-ENTRADA1-OK
DISPLAY 'ERROR EN ABRIR-ENTRADA1'
DISPLAY 'FILE-STATUS = ' FS-ENTRADA1
END-IF.
IF NOT FS-SALIDA-OK
DISPLAY 'ERROR EN ABRIR-FVSAM'
DISPLAY 'FILE-STATUS = ' FS-SALIDA
END-IF.
*----------------------
1101-LEER-ENTRADA0.
*----------------------
READ ENTRADA0 INTO ENT-V0
EVALUATE TRUE
WHEN FS-ENTRADA0-OK
ADD 1 TO REG-LEIDOS-EN0
WHEN FS-ENTRADA0-EOF
SET FIN-ENTRADA0 TO TRUE
WHEN OTHER
DISPLAY 'ERROR EN 1101-LEER-ENTRADA0'
DISPLAY 'FILE-STATUS = ' FS-ENTRADA0
PERFORM 3020-ESTADISTICAS
END-EVALUATE.
*------------------------
3010-CERRAR-FICHEROS.
*------------------------
CLOSE ENTRADA0
ENTRADA1
SALIDA.
IF NOT FS-ENTRADA0-OK
DISPLAY 'ERROR EN 3010-CERRAR-ENTRADA0'
DISPLAY 'FILE-STATUS = ' FS-ENTRADA0
PERFORM 3020-ESTADISTICAS
END-IF.
IF NOT FS-ENTRADA1-OK
DISPLAY 'ERROR EN 3010-CERRAR-ENTRADA1'
DISPLAY 'FILE-STATUS = ' FS-ENTRADA1
PERFORM 3020-ESTADISTICAS
END-IF.
IF NOT FS-SALIDA-OK
DISPLAY 'ERROR EN 3010-CERRAR-FVSAM'
DISPLAY 'FILE-STATUS = ' FS-SALIDA
PERFORM 3020-ESTADISTICAS
END-IF.
*----------------------
1102-LEER-ENTRADA1.
*----------------------
READ ENTRADA1 INTO ENT-V1
EVALUATE TRUE
WHEN FS-ENTRADA1-OK
ADD 1 TO REG-LEIDOS-EN1
WHEN FS-ENTRADA1-EOF
SET FIN-ENTRADA1 TO TRUE
WHEN OTHER
DISPLAY 'ERROR EN 1102-LEER-ENTRADA1'
DISPLAY 'FILE-STATUS = ' FS-ENTRADA1
PERFORM 3020-ESTADISTICAS
END-EVALUATE.
*------------------
2100-MODIFICAR-VSAM.
*------------------
REWRITE REG-VSAM
INVALID KEY
DISPLAY 'ERROR EN MODIFICAR-VSAM'
DISPLAY 'FILE-STATUS = ' FS-SALIDA
PERFORM 3020-ESTADISTICAS
ADD 1 TO REG-MODIF-VSAM.
*-------------
2200-BAJA-VSAM.
*-------------
DELETE REG-VSAM
INVALID KEY
DISPLAY 'ERROR EN BAJA-VSAM'
DISPLAY 'FILE-STATUS = ' FS-SALIDA
PERFORM 3020-ESTADISTICAS.
ADD 1 TO REG-BORRADOS-VSAM.
*-------------
2300-ALTA-VSAM.
*-------------
WRITE REG-VSAM
INVALID KEY
DISPLAY 'ERROR EN ALTA-VSAM'
DISPLAY 'FILE-STATUS = ' FS-SALIDA
PERFORM 3020-ESTADISTICAS.
ADD 1 TO REG-GRABADOS-VSAM.
*------------------------------------------
* 3020-ESTADISTICAS
*-------------------------------------------
3020-ESTADISTICAS.
*-------------
DISPLAY '******************************************'
DISPLAY '* E S T A D I S T I C A S *'
DISPLAY '******************************************'
DISPLAY ' PROGRAMA PROG009'
DISPLAY '******************************************'
DISPLAY 'REG. LEIDOS OFI V0 ........ ' REG-LEIDOS-EN0.
DISPLAY 'REG. LEIDOS OFI V-1 ....... ' REG-LEIDOS-EN1.
DISPLAY 'REG. GRABADOS OFI VSAM .... ' REG-GRABADOS-VSAM.
DISPLAY 'REG. BORRADOS OFI VSAM .... ' REG-BORRADOS-VSAM.
DISPLAY 'REG. MODIFIC EN OFI VSAM .. ' REG-MODIF-VSAM.
DISPLAY '******************************************'.
**************FIN FISICO DEL PROGRAMA PROG010 *************
'-------------------
Nota: Probe la "Lectura" sequencial(READ NEXT) del archivo Vsam (con otro program) y no me arrojo
ningún Problema con Definición de acceso Secuencial (SEQUENTIAL).
Agradeciendo su importante apoyo.
Aldo Rodríguez Vera.