Sei sulla pagina 1di 20

Gabriel Alejandro Kordon COBOL VSAM

B o r r a d o r
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
Gabriel Alejandro Kordon COBOL VSAM

1. INTRODUCCIONES DEL LENGUAJE COBOL


PARA 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 basadas


en 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
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 la
cláusula ORGANIZATION, siendo obligatoria para un KSDS, ya que de omitirse
asume “Organization is sequential”.

Las opciones de acceso se indican con ACCESS MODE y al omitir ésta cláusula
asume 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 campo
dentro 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 con
base en la clave principal, especificada en la cláusula RECORD KEY,o con base
en otra ALTERNATE RECORD KEY.
La mención de DUPLICATES es para que el valor asociado con la clave de
registro alternativa pueda estar duplicado, en cualquiera de los registros del
archivo. En ausencia de esta palabra, la presencia de valores de clave
duplicadas es una condición de error.
Los valores duplicados estarían permitidos solo para claves alternas, pues cada
registro debe tener una clave principal única.

3 / 20
Gabriel Alejandro Kordon COBOL VSAM

FILE STATUS
Al utilizar archivos VSAM en un programa COBOL, tenemos la posibilidad de
conocer como ha terminado una instrucción de entrada/ salida relacionada a
estos archivos, pues el metodo de acceso VSAM devuelve al programa un
código numérico de dos dígitos que indica como ha finalizado la sentencia
INPUT/OUTPUT de COBOL.
Este código se denomina FILE STATUS y puede ser consultado por el programa
COBOL y condicionar la ejecución de determinadas rutinas según el valor
indicado en dicho código.
En la WORKING- STORAGE SECTION se define un campo elemental para cada
archivo VSAM (generalmente con nivel 77) y es mencionado en la SELECT del
archivo.
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
Gabriel Alejandro Kordon COBOL VSAM

PASSWORD

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

Las claves de protección son definidas para cada archivo con el comando
DEFINE 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 select


como PASSWORD IS ......... nombre de campo.
Antes de ejecutar el OPEN del archivo protegido se pedirá al operador que
ingrese la palabra clave y ésta se deberá alojar en el campo indicado en la
select.
Cuando se ejecuta la instrucción OPEN, se llama a la ejecución de las rutinas
del 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 acceso


secuencial y por indice en forma simultánea (ACCESO DINAMICO) y
la eliminación FÍSICA de registros (DELETE).

5 / 20
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 los
siguientes verbos:

OPEN I-O
WRITE
REWRITE
START
DELETE
CLOSE
Y el READ con el siguiente formato:

READ file- name NEXT RECORD


[INTO record- name]
AT END instrucción imperativa

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
Gabriel Alejandro Kordon COBOL VSAM

En el curso por medio de un índice, simultaneo al acceso secuencial, se


utilizan 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 DELETE
Instrucció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 de
leer.
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
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 la


carga 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, accedido


dinamicamente, con una sola clave y utilizando las opciones FILE STATUS y
PASWORD.

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

El proceso secuencial o indexado de un archivo es similar a un archuvo


secuencial o indexado tradicional (ISAM).

8 / 20
Gabriel Alejandro Kordon COBOL VSAM

9 / 20
Gabriel Alejandro Kordon COBOL VSAM

10 / 20
Gabriel Alejandro Kordon COBOL VSAM

11 / 20
Gabriel Alejandro Kordon COBOL VSAM

ARCHIVOS CON REGISTROS DE LONGITUD VARIABLE

La presentación de este tema está planteada para todo tipo de archivo que
soporte 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 del
VSAM.
El tratamiento COBOL de archivos secuenciales (SAM) con registros variables
es similar a los archivos VSAM.

2.1 GENERALIDADES
Los registreos físicos (bloques) de longitud variable son precedidos por campos
que contienen información de control.
Los primeros cuatro (4) bytes de cada bloque contienen información de
control 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 contienen


informació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
Gabriel Alejandro Kordon COBOL VSAM

Gráficamente:

Registro de longitud variable no bloqueado.


4 4
bytes bytes variable
LL BB ll bb DATOS

CC cc

Registro de longitud variable bloqueado.

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

REGISTRO LOGICO 1 REGISTRO LOGICO 2 REGISTRO LOGICO 3

Los bytes de control son automáticamente suministrados cuando el archivo es grabado por
primera 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
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 la
longitud del bloque.
• Cuando se utiliza con la opción CHARACTERS, el programador debe
sumar 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 estan


bloqueados.

RECORDS CONTAINS integer- 1 TO integer- 2 CHARACTERS

• Integer- 1 indica el número de caracteres en el registro más pequeño y


integer- 2 el número de caracteres en el más largo.

Esta cláusula es opcional. Si se omite, la longitud de registro es


determinada por el compilador desde la descripción del mismo. Cuando
una o más de las entradas de descripción de datos dentro de un registro
tiene una cláusula OCCURS con la opción DEPENDING ON, el compilador
utiliza 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), y
cada bloque incluye un campo de descripción de bloque (CC). Estos
campos no son descriptos en la Data División y no están disponibles para
el usuario.

14 / 20
Gabriel Alejandro Kordon COBOL VSAM

Esta cláusula es opcional. Si se omite el compilador determina que


RECORDING MODE IS V si se trata de un archivo secuencial standard,
siempre y cuando el registro tenga una estructura variable (si la estructura
del registro es fija, asume F, sin codificar Recording Mode). También
asume V o F, de acuerdo a lo indicado n la clausula RECORD CONTAINS (En
este 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ÓN


DE REGISTROS.
Un registro de longitud variable puede definirse :
• Utilizando varios niveles 01 a continuación de la FD, describiendo en
cada uno los distintos tipos de registros.
• Utilizando un único nivel 01 y dividiendo al registro lógico en 2
partes.

- 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 de
ocurrencias de la/s parte/s variable/s.

- Parte variable: contiene la información variable, que puede o no existir. Se


define como una o más entradas con la cláusula OCCURS con la opción
DEPENDING ON, y la cantidad de ocurrencias dependerá del contador
correspondiente en la parte fija.
-
contador de ocurrencias
parte variable
DATOS “12”

PARTE FIJA PARTE VARIABLE

15 / 20
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
Gabriel Alejandro Kordon COBOL VSAM

2. Archivo secuencial, registros de longitud variable, no


bloqueado.
Supongamos que en una escuela con 500 alumnos inscriptos se desea tener un
registro por día con la siguiente información: fecha, apellido de todos los
alumnos ausentes, apellido de todos los alumnos presentes, apellido de todos
los 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 registro


asociado 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 no
bloqueado.
La cláusula RECORD CONTAINS nunca es requerida. El compilador determina la longitud
de 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 y


el valor 03 para el segundo, los primeros dos registros aparecerán en dispositivos de
memoria externa y en áreas buffer de memoria como se muestra en el gráfico.

Ejemplo, de Archivo secuencial, con registro de longitud variable, bloqueado con


espacio para 3 registros de longitud máxima por bloque. La siguiente FD podría usarse al
crear el archivo.

17 / 20
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- ONLY


Esta cláusula es usada para hacer un uso óptimo del buffer y del espacio de memoria
externa cuando se crea un archivo secuencial con registros bloqueados de longitud
variable.

El uso de esta cláusula hace que el buffer (en el cual se arma el bloque o registro físico
a ser grabado) sea truncado solamente cuando el próximo registro lógico a grabar no
entre 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
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 y
luego 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 del
contador de ocurrencias).
Nivel 05 – Parte variable definida en cláusula OCCURS
DEPENDING ON xx. Donde xx es el contador de ocurrencias de partes
variables 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
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

Potrebbero piacerti anche