Subido por chuchometalyeah

36278564-CODIFICACION-COBOL-VSAM

Anuncio
COBOL VSAM
Gabriel Alejandro Kordon
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
COBOL VSAM
Gabriel Alejandro Kordon
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
COBOL VSAM
Gabriel Alejandro Kordon
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
COBOL VSAM
Gabriel Alejandro Kordon
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
22
23
24
30
34
91
92
93
94
Error de secuencia.
Clave duplicada.
Registro no encontrado.
Capacidad excedida- archivo ksds.
Error de datos, de paridad o transmisión.
Capacidad excedida- archivo Esds.
Password erronea.
Error lógico.
Recurso no disponible.
Requerimiento secuencial carente de pointer, falla en el
95
96
Start.
información de archivo invalida o incompleta.
falta tarjeta dd.
4 / 20
COBOL VSAM
Gabriel Alejandro Kordon
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
COBOL VSAM
Gabriel Alejandro Kordon
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
siguientes verbos:
OPEN
proceso sequencial se hará a travez de los
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:
START
file- name [KEY IS
EQUAL
TO
(=)
GREATER
THAN
(>)
NOT LEES
THAN
(NOT <)}
[INVALID KEY
instrucción- imperativa]
6 / 20
name]
COBOL VSAM
Gabriel Alejandro Kordon
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
[INTO
record- name]
INVALID KEY
RECORD
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
COBOL VSAM
Gabriel Alejandro Kordon
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
COBOL VSAM
Gabriel Alejandro Kordon
9 / 20
COBOL VSAM
Gabriel Alejandro Kordon
10 / 20
COBOL VSAM
Gabriel Alejandro Kordon
11 / 20
COBOL VSAM
Gabriel Alejandro Kordon
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
COBOL VSAM
Gabriel Alejandro Kordon
Gráficamente:
Registro de longitud variable no bloqueado.
4
4
bytes
LL
bytes
BB
ll
CC
variable
bb
DATOS
cc
Registro de longitud variable bloqueado.
LL BB ll
bb
DATOS 1
REGISTRO LOGICO 1
ll
bb
DATOS 2
REGISTRO LOGICO 2
ll
bb
DATOS 3
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
COBOL VSAM
Gabriel Alejandro Kordon
•
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
COBOL VSAM
Gabriel Alejandro Kordon
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
COBOL VSAM
Gabriel Alejandro Kordon
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
COBOL VSAM
Gabriel Alejandro Kordon
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
COBOL VSAM
Gabriel Alejandro Kordon
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).
CAMPO- X
PIC X (20).
01 REGVAR2.
05
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 INPUTOUTPUT SECTION.
Formato:
APPLY WRITE- ONLY ON nombre Arch. 1 nombre Arch. 2 …
18 / 20
COBOL VSAM
Gabriel Alejandro Kordon
•
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
contador de ocurrencias).
parte
fija
(incluida
longitud
del
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
COBOL VSAM
Gabriel Alejandro Kordon
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
03
FIJO.
05
CAMPO 1
PIC X (8).
05
OCU
PIC S99 COMP SYNC.
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
Descargar