20
Gabriel Alejandro Kordon COBOL VSAM Borrador material en preparación CODIFICACIÓN COBOL PARA ARCHIVOS VSAM y Cobol para archivos de longitud variable 1. INSTRUCCIONES DEL LENGUAJE COBOL PARA ARCHIVOS VSAM 1.1 Codificación de Las “select” en la ENVIRONMENT DIVISION: Cláusulas: organization, record key, alternate record key, FILE STATUS y password. 1.2 Access is DYNAMIC: Instrucción delete Ejemplos de codificación. 2. ARCHIVOS CON REGISTROS DE LONGITUD VARIABLE 2.1 Generalidades 2.2 Codificación COBOL. Definición de FD: ARCHIVO su descripción. 2.3 Codificación COBOL. Definición de registros 2.4 Clausula APPLY WRITE-ONLY. 1 / 20

CODIFICACION COBOL VSAM

Embed Size (px)

Citation preview

Page 1: CODIFICACION COBOL VSAM

Gabriel Alejandro Kordon COBOL VSAM

B o r r a d o r material en preparación

CODIFICACIÓN COBOLPARA ARCHIVOS VSAM

yCobol para archivos de longitud variable

1. INSTRUCCIONES DEL LENGUAJE COBOL PARA ARCHIVOS VSAM

1.1 Codificación de Las “select” en la ENVIRONMENT DIVISION:

Cláusulas: organization, record key, alternate record key, FILE STATUS y password.

1.2 Access is DYNAMIC:

• Instrucción delete

• Ejemplos de codificación.

2. ARCHIVOS CON REGISTROS DE LONGITUD VARIABLE

2.1 Generalidades

2.2 Codificación COBOL. Definición de FD: ARCHIVO su descripción.

2.3 Codificación COBOL. Definición de registros

2.4 Clausula APPLY WRITE-ONLY.

1 / 20

Page 2: CODIFICACION COBOL VSAM

Gabriel Alejandro Kordon COBOL VSAM

1. INTRODUCCIONES DEL LENGUAJE COBOLPARA ARCHIVOS VSAM

Hay dos divisiones que tienen instrucciones especiales:

LA ENVIRONMENT DIVISION y LA PROCEDURE DIVISION.

1.1ENVIRONMENT DIVISION

En la ENVIRONMENT DIVISION encontramos algunas opciones nuevas basadasen el siguiente formato:

SELECT nombre- archivo- interno ASSIGN TO nombre-archivo-externo

ORGANIZATION IS INDEXED

ACCESS MODE IS {SEQUENTIAL

RANDOM

DYNAMIC}

RECORD KEY IS nombres- de- datos- 1

ALTERNATE RECORD KEY IS nombre- de- datos- 2

[WITH DUPLICATES]

FILE STATUS IS nombre- de- datos- 3

PASSWORD IS nombre- de- datos- 4

2 / 20

Page 3: CODIFICACION COBOL VSAM

Gabriel Alejandro Kordon COBOL VSAM

La instrucción ORGANIZATION IS INDEXED explica que ese será un archivo KSDS(VSAM), un archivo secuencial con índice VSAM.

Para archivos ESDS (archivos secuenciales bajo VSAM), no se codifica lacláusula ORGANIZATION, siendo obligatoria para un KSDS, ya que de omitirseasume “Organization is sequential”.

Las opciones de acceso se indican con ACCESS MODE y al omitir ésta cláusulaasume ACCESS MODE IS SEQUENTIAL.

El modo de acceso para archivos secuenciales es siempre SEQUENTIAl.

Para archivos de organización indexada, puede ser:

• SEQUENTIAL

• RANDOM

• DYNAMIC

El modo de acceso DYNAMIC será tratado mas adelante.

RECORD KEY hace referencia a un nombre de dato que debe ser un campodentro de la descripción del registro, la clave de ordenamiento del archivo.

La opción ALTERNATE RECORD especifica la clave alternativa para el archivo.

Cuando se emplean claves alternadas podemos tener acceso a registros conbase en la clave principal, especificada en la cláusula RECORD KEY,o con baseen otra ALTERNATE RECORD KEY.

La mención de DUPLICATES es para que el valor asociado con la clave deregistro alternativa pueda estar duplicado, en cualquiera de los registros delarchivo. En ausencia de esta palabra, la presencia de valores de claveduplicadas es una condición de error.

Los valores duplicados estarían permitidos solo para claves alternas, pues cadaregistro debe tener una clave principal única.

3 / 20

Page 4: CODIFICACION COBOL VSAM

Gabriel Alejandro Kordon COBOL VSAM

FILE STATUSAl utilizar archivos VSAM en un programa COBOL, tenemos la posibilidad deconocer como ha terminado una instrucción de entrada/ salida relacionada aestos archivos, pues el metodo de acceso VSAM devuelve al programa uncódigo numérico de dos dígitos que indica como ha finalizado la sentenciaINPUT/OUTPUT de COBOL.

Este código se denomina FILE STATUS y puede ser consultado por el programaCOBOL y condicionar la ejecución de determinadas rutinas según el valorindicado en dicho código.

En la WORKING- STORAGE SECTION se define un campo elemental para cadaarchivo VSAM (generalmente con nivel 77) y es mencionado en la SELECT delarchivo.

Los errores más frecuentes a detectar con FILE STATUS son:

21 Error de secuencia.22 Clave duplicada.23 Registro no encontrado.24 Capacidad excedida- archivo ksds.30 Error de datos, de paridad o transmisión.34 Capacidad excedida- archivo Esds.91 Password erronea.92 Error lógico.93 Recurso no disponible.94 Requerimiento secuencial carente de pointer, falla en el

Start.95 información de archivo invalida o incompleta.96 falta tarjeta dd.

4 / 20

Page 5: CODIFICACION COBOL VSAM

Gabriel Alejandro Kordon COBOL VSAM

PASSWORD

Los archivos VSAM pueden tener claves de protección, PASWORD, para seraccedidos.

Las claves de protección son definidas para cada archivo con el comandoDEFINE del AMS.

Hay tres tipos de protección, que definen a la clave:

- clave de lectura

- clave de grabación

- clave E/S o Maestra.

En la WORKING- STORAGE SECTION se define un campo indicado en la selectcomo PASSWORD IS ......... nombre de campo.

Antes de ejecutar el OPEN del archivo protegido se pedirá al operador queingrese la palabra clave y ésta se deberá alojar en el campo indicado en laselect.

Cuando se ejecuta la instrucción OPEN, se llama a la ejecución de las rutinasdel AMS que controlarán si la clave de PASSWORD es la correcta. De no ser así,terminará la instrucción con FILE STATUS = 91.

Estableciendo el programa que acción se deberá realizar.

OTRAS de las ventajas del VSAM, es la utilización del accesosecuencial y por indice en forma simultánea (ACCESO DINAMICO) yla eliminación FÍSICA de registros (DELETE).

5 / 20

Page 6: CODIFICACION COBOL VSAM

Gabriel Alejandro Kordon COBOL VSAM

1.2 ACCESO DINAMICO (DYNAMIC)

EL ACCESS IS DYNAMIC permite acceder al archivo VSAM en forma“SEQUENTIAL” y “RANDOM” en un programa de aplicación en lenguaje COBOL.

En la PROCEDURE DIVISION el proceso sequencial se hará a travez de lossiguientes verbos:

OPEN I-O

WRITE

REWRITE

START

DELETE

CLOSE

Y el READ con el siguiente formato:

El formato del START es:

EQUAL TO (=)

GREATER THAN (>)

START file- name [KEY IS NOT LEES THAN name]

(NOT <)}

[INVALID KEY instrucción- imperativa]

6 / 20

READ file- name NEXT RECORD [INTO record- name]

AT END instrucción imperativa

Page 7: CODIFICACION COBOL VSAM

Gabriel Alejandro Kordon COBOL VSAM

En el curso por medio de un índice, simultaneo al acceso secuencial, seutilizan los verbos:

OPEN I-O

READ

WRITE

REWRITE

DELETE

CLOSE

La instrucción READ con el siguiente formato:

READ file- name RECORD

[INTO record- name]

INVALID KEY instrucción imperativa

1.3 DELETEInstrucción del COBOL para eliminar físicamente registros de archivos VSAM,actualizando el FILE STATUS.

DELETE file- name RECORD

[INVALID KEY instrucción]

Acceso secuencial:

Necesita previamente un READ satisfactorio, BORRANDO lo que se acaba deleer.

No corresponde utilizar la opción INVALID KEY.

Acceso Random y Dynamic:

EL BORRADO se produce sobre el registro identificado por la RECORD KEY,siendo válido el uso del INVALID KEY.

7 / 20

Page 8: CODIFICACION COBOL VSAM

Gabriel Alejandro Kordon COBOL VSAM

1.4 EJEMPLOS DE CODIFICACIÓN .

La figura 1 nos muestra la codificación de un archivo ESDS, la figura 2 y 3 lacarga por programa de un ESDS y la figura 4 un ejemplo de actualización.

La figura 5 muestra una codificación de un archivo KSDS, accedidodinamicamente, con una sola clave y utilizando las opciones FILE STATUS yPASWORD.

La figura 6 tomo como base la codificación de la figura anterior para que sirvade ejemplo de acceso dinámico.

El proceso secuencial o indexado de un archivo es similar a un archuvosecuencial o indexado tradicional (ISAM).

8 / 20

Page 9: CODIFICACION COBOL VSAM

Gabriel Alejandro Kordon COBOL VSAM

9 / 20

Page 10: CODIFICACION COBOL VSAM

Gabriel Alejandro Kordon COBOL VSAM

10 / 20

Page 11: CODIFICACION COBOL VSAM

Gabriel Alejandro Kordon COBOL VSAM

11 / 20

Page 12: CODIFICACION COBOL VSAM

Gabriel Alejandro Kordon COBOL VSAM

ARCHIVOS CON REGISTROS DE LONGITUD VARIABLE

La presentación de este tema está planteada para todo tipo de archivo quesoporte registros de longitud VARIABLE, como sucede con los archivos VSAM.

Para archivos VSAM el capitulo referido a la cláusula APPLY es innecesario,pues del uso óptimo del BUFFER se encarga el AMS, el método de acceso delVSAM.

El tratamiento COBOL de archivos secuenciales (SAM) con registros variableses similar a los archivos VSAM.

2.1 GENERALIDADESLos registreos físicos (bloques) de longitud variable son precedidos por camposque contienen información de control.

Los primeros cuatro (4) bytes de cada bloque contienen información decontrol que se divide en:

LL: 2bytes que contienen la longitud del bloque (en

CC hexa) incluyendo el campo CC.

BB: 2 bytes recervados para uso del sistema.

A su vez los primeros 4 bytes de cada registro lógico también contieneninformación de control, que se divide en:

ll: 2 bytes que contienen la longitud del registro lógico, (en hexa) incluyendo el campo cc.

cc

bb: 2 bytes reservados para uso del sistema.

12 / 20

Page 13: CODIFICACION COBOL VSAM

Gabriel Alejandro Kordon COBOL VSAM

Gráficamente:

Registro de longitud variable no bloqueado.

4 4

bytes bytes variable

CC cc

Registro de longitud variable bloqueado.

REGISTRO LOGICO 1 REGISTRO LOGICO 2 REGISTRO LOGICO 3

Los bytes de control son automáticamente suministrados cuando el archivo es grabado porprimera vez y no son comunicados al programador cuando el archivo es leído.

2.2 CONSIDERACIONES EN LOS PROGRAMAS COBOL.

2.2.1 DEFINICIÓN DE FD.

SENTENCIA FD: cláusulas afectadas

{CHARACTERS

BLOCK CONTAINS [integer- l TO] integer- 2

RECORDS}

13 / 20

LL BB ll bb DATOS

LL BB ll bb DATOS 1 ll bb DATOS 2 ll bb DATOS 3

Page 14: CODIFICACION COBOL VSAM

Gabriel Alejandro Kordon COBOL VSAM

• Cuando se utiliza con la opción RECORD el compilador agrega 4 bytes(para el cc) a la longitud del registro lógico y 4 bytes (para el cc) a lalongitud del bloque.

• Cuando se utiliza con la opción CHARACTERS, el programador debesumar 4 bytes (para el cc) a la longitud del registro lógico y 4 bytes(para el cc) a la longitud del bloque.

Esta cláusula es opcional. Si se omite se asume que los registros no estanbloqueados.

RECORDS CONTAINS integer- 1 TO integer- 2 CHARACTERS

• Integer- 1 indica el número de caracteres en el registro más pequeño yinteger- 2 el número de caracteres en el más largo.

Esta cláusula es opcional. Si se omite, la longitud de registro esdeterminada por el compilador desde la descripción del mismo. Cuandouna o más de las entradas de descripción de datos dentro de un registrotiene una cláusula OCCURS con la opción DEPENDING ON, el compiladorutiliza el máximo valor de la variable para calcular la longitud del registro.

RECORDING MODE IS ( mode = V, o mode = F )

• Los registros pueden ser de longitud fija o variable.

• Cada registro lógico debe estar contenido íntegramente en un bloque.

• Un bloque puede contener 1 o más registros lógicos.

• Cada registro lógico incluye un campo de longitud de registro en (cc), ycada bloque incluye un campo de descripción de bloque (CC). Estoscampos no son descriptos en la Data División y no están disponibles parael usuario.

14 / 20

Page 15: CODIFICACION COBOL VSAM

Gabriel Alejandro Kordon COBOL VSAM

Esta cláusula es opcional. Si se omite el compilador determina queRECORDING MODE IS V si se trata de un archivo secuencial standard,siempre y cuando el registro tenga una estructura variable (si la estructuradel registro es fija, asume F, sin codificar Recording Mode). Tambiénasume V o F, de acuerdo a lo indicado n la clausula RECORD CONTAINS (Eneste caso, que Record Contains especifica registros de longitud variable,la longitud del máximo registro lógico es menor o igual que un bloque.

2.3. CONSIDERACIONES EN LOS PROGRAMAS COBOL. DEFINICIÓNDE REGISTROS.

Un registro de longitud variable puede definirse :

• Utilizando varios niveles 01 a continuación de la FD, describiendo encada uno los distintos tipos de registros.

• Utilizando un único nivel 01 y dividiendo al registro lógico en 2partes.

- Parte fija : contiene la información común a todos los registros (que estápresente en todos) y contiene también uno o más contadores deocurrencias de la/s parte/s variable/s.

- Parte variable : contiene la información variable, que puede o no existir. Sedefine como una o más entradas con la cláusula OCCURS con la opciónDEPENDING ON, y la cantidad de ocurrencias dependerá del contadorcorrespondiente en la parte fija.

-

contador de ocurrencias

parte variable

PARTE FIJA PARTE VARIABLE

15 / 20

DATOS “12”

Page 16: CODIFICACION COBOL VSAM

Gabriel Alejandro Kordon COBOL VSAM

01 REGISTRO- VARIABLE.

05 PARTE- FIJA.

10 DATOS PIC X(5).

10 CONT PIC S99 COMP- 3.

05 PARTE VARIABLE OCCURS 0 TO 99 TIMES

DEPENDING ON CONT

PIC XX.

EJEMPLOS

1. Archivo secuencial, registros de longitud variable no bloqueados.

FD FICHVARL

RECORDING MODE IS V

BLOCK CONTAINS O RECORDS

DATA RECORD IS REGVARL

LABEL RECORDS ARE STANDARD.

01 REGISTRO-ASISTENCIA.

05 FECHA PIC 9 (6).

05 AUSENTES PIC S999 COMP SYNC.

05 PRESENTES PIC S999 COMP SYNC.

05 TARDE PIC S999 COMP SYNC.

05 NOMBRE- AUS OCCURS 0 TO 500 TIMES

DEPENDING ON AUSENTES

PIC A (20).

05 NOMBRE- PRES OCCURS 0 TO 500 TIMES

DEPENDING ON PRESENTES

PIC A (20).

05 NOMBRE- TAR OCCURS 0 TO 500 TIMES

DEPENDING ON TARDE

PIC A (20).

16 / 20

Page 17: CODIFICACION COBOL VSAM

Gabriel Alejandro Kordon COBOL VSAM

2. Archivo secuencial, registros de longitud variable, nobloqueado.

Supongamos que en una escuela con 500 alumnos inscriptos se desea tener unregistro por día con la siguiente información: fecha, apellido de todos losalumnos ausentes, apellido de todos los alumnos presentes, apellido de todoslos alumnos que han llegado tarde.

La descripción del registro podría ser:

01 REGVARL

05 CAMPO- A PIC X (20).

05 CAMPO- B PIC 99.

05 CAMPO- C OCCURS 1 TO 10 TIMES

DEPENDING ON CAMPO- B

PIC 9 (5).

Si se omite la cláusula RECORDING MODE IS V, el compilador asumirá V ya que el registroasociado con FICHVARL varía en longitud dependiendo de los valores de CAMPO- B.

La cláusula BLOCK CONTAINS nunca es requerida. Si se omite, el compilador asume nobloqueado.

La cláusula RECORD CONTAINS nunca es requerida. El compilador determina la longitudde los registros desde la descripción de los mismos. (ver consideraciones sentencia FD).

- Asumiendo que CAMPO- B contiene el valor 02 para el primer registro de un ARCHIVO yel valor 03 para el segundo, los primeros dos registros aparecerán en dispositivos dememoria externa y en áreas buffer de memoria como se muestra en el gráfico.

Ejemplo, de Archivo secuencial, con registro de longitud variable, bloqueado conespacio para 3 registros de longitud máxima por bloque. La siguiente FD podría usarse alcrear el archivo.

17 / 20

Page 18: CODIFICACION COBOL VSAM

Gabriel Alejandro Kordon COBOL VSAM

FD FICHVAR2

RECORDING MODE IS V

BLOCK CONTAINS 3 RECORDS

RECORD CONTAINS 20 TO 100 CHARACTERS

DATA RECORDS ARE REGVARL, REGVAR2

LABEL RECORDS ARE STANDARD.

01 REGVARL.

05 CAMPO- A PIC X (20).

05 CAMPO- B PIC X (80).

01 REGVAR2.

05 CAMPO- X PIC X (20).

4. CLAUSULA APPLY WRITE- ONLYEsta cláusula es usada para hacer un uso óptimo del buffer y del espacio de memoriaexterna cuando se crea un archivo secuencial con registros bloqueados de longitudvariable.

El uso de esta cláusula hace que el buffer (en el cual se arma el bloque o registro físicoa ser grabado) sea truncado solamente cuando el próximo registro lógico a grabar noentre en él.

Restricciones y normas de uso

• La cláusula APPLY WRITE- ONLY debe codificarse en la I- O- CONTROL de la INPUT-OUTPUT SECTION.

Formato:

APPLY WRITE- ONLY ON nombre Arch. 1 nombre Arch. 2 …

18 / 20

Page 19: CODIFICACION COBOL VSAM

Gabriel Alejandro Kordon COBOL VSAM

• El ARCHIVO afectado puede ser abierto solo como OUTPUT.

• Toda sentencia WRITE asociada con el ARCHIVO debe usar la opción:

WRITE record- name FROM identifier.

• Por lo anterior, es necesario armar el registro en la WORKING- STORAGE SECTION yluego grabarlo.

• En la FILE SECTION se codificará la FD y el nivel 01 para la descripción del registro.

La forma de definirlo será:

Nivel 01 - Nombre del registro.

Nivel 05 - FILLER parte fija (incluida longitud delcontador de ocurrencias).

Nivel 05 – Parte variable definida en cláusula OCCURS

DEPENDING ON xx. Donde xx es el contador de ocurrencias de partesvariables del registro definido en la WORKING- STORAGE SECTION.

Ejemplo:

Generación de un Archivo secuencial, no bloqueado, con registros de longitud variable(FICHVAR).

• En la i- o CONTROL:

APPLY WRITE- ONLY ON FICHVAR.

• En la FILE SECTION:

FD FICHVAR

RECORDING MODE IS V

RECORD CONTAINS 10 TO 55 CHARACTERS

DATA RECORD IS REGVAR

LABEL RECORDS ARE STANDARD.

19 / 20

Page 20: CODIFICACION COBOL VSAM

Gabriel Alejandro Kordon COBOL VSAM

01 REGVAR.

05 FILLER PIC X (10).

05 VARIABLE OCCURS 0 TO 15 TIMES

DEPENDING ON OCU

PIC XXX.

• En la WORKING- STORAGE SECTION

01 REGVAR- FROM

03 FIJO.

05 CAMPO 1 PIC X (8).

05 OCU PIC S99 COMP SYNC.

03 VARI

OCCURS 0 TO 15 TIMES

DEPENDING ON OCU.

05 CAMPO2 PIC XX.

05 CAMPO3 PIC X.

• En la PROCEDURE DIVISION.

OPEN OUTPUT FICHVAR.

Armado del registro de output en REGVAR- FROM

WRITE REGVAR FROM REGVAR- FROM

INVALID KEY………….

20 / 20