Está en la página 1de 20

Definición de tabla

Hay tres verbos COBOL que se utilizan al definir tablas. Estos son:

� REDEFINES
� OCCURS
� INDEXED BY

Una vez que haya especificado los datos de la tabla, debe especificar cómo se
organizado en la tabla. El ejemplo de código 370.1.2 muestra el código que especifica
la organización de la tabla de cuentas.

El nivel 05 REDEFINE los datos de la tabla. El nivel 10 especifica el número


de entradas en la tabla y el nombre del índice. Los 15 - niveles especifican
cómo se separan las entradas de la tabla en campos de tabla individuales.

REDEFINES

Primero aprenderemos sobre la cláusula REDEFINES en el tutorial en el Tema 340,


Datos de formato. La cláusula REDEFINES también se puede utilizar para redefinir la
tabla
datos.

El ejemplo de código 370.1.2 resalta el nivel 01 de la definición de la tabla, que


especifica el nombre del diseño de registro de la tabla, ACCOUNT-TABLE. Tenga en
cuenta cómo

la cláusula REDEFINES se usa para que ACCOUNT-TABLE. redefina


CUENTA-DATOS. De esta manera, usamos ACCOUNT-DATA. para especificar el
contenido de la tabla y ACCOUNT-DATA.. para especificar la organización de
Este contenido.

Ejemplo de código 370. 1.2 - Definición de una tabla interna


OCCURS
La cláusula OCCURS, codificada en el nivel 10, especifica cuántas entradas de la tabla
hay dentro de la tabla. Puede codificar el número de entradas en
la cláusula OCCURS como se ve en el ejemplo. Nuestra tabla de muestra tiene siete
entradas de la tabla:

INDEXED BY
La cláusula INDEXED BY, codificada en el nivel 10, especifica el nombre del
índice de la tabla. En ACCOUNT-TABLE, el nombre del índice es ACCOUNT-INDEX..
El nombre del índice lo crea el programador, pero debe tener el mismo
prefijo que la tabla que lo utiliza. Recuerde que el índice mantiene la posición relativa
de la entrada de la tabla a la que se accede.

Tenga en cuenta que si bien un índice contiene un valor numérico, no se puede usar con
el
ADD, SUBTRACT, MULTIPLY, DIVIDE, COMPUTE, or MOVE verbos.
Un índice no es un campo numérico de visualización o numérico empaquetado, por lo
que no se puede utilizar
en sentencias aritméticas o moverse a otros campos numéricos. Puede ser usado
sólo con los verbos SET o PERFORM. Una vez que se define un índice para una tabla,
ese índice puede usarse solo con los datos de esa tabla
Finalmente, los 10 niveles especifican cómo las entradas de la tabla se separan en
campos de la tabla Esta información le dice a la computadora exactamente cómo redefinir
los datos de la tabla en campos individuales.

En el ejemplo de código 370.1.3, cada entrada de la tabla se divide en tres campos.


Ejemplo de código 370.1.3 - Datos de tabla y definición de tabla
Para que la tabla redefina los datos de la tabla correctamente, la definición de datos de la
tabla debe especificar los datos de manera que los campos de la tabla tengan la misma
longitud
y orden como se especifica en la definición de la tabla
(ver Figura 370. I.2).

Figura 370.1.2 - Comparación de datos de tabla y definición de tabla


Asignación de nombres de datos (Data Name)

Al asignar nombres de datos en la definición de la tabla, recuerde seguir las Reglas de


nombres de datos COBOL que aprendió anteriormente.

Nombres de datos (Data Name):


 Debe contener solo letras, dígitos y guiones; sin caracteres especiales (como @, $,
!, etc.).
 Debe tener al menos un carácter alfabético.
 No puede tener guiones al principio o al final.
 No puede contener espacios en blanco incrustados.
 No puede ser una palabra reservada de COBOL.
 No puede tener más de 30 caracteres.
 Debe ser única.

Observe que todos los nombres de datos en la tabla tienen el mismo prefijo que la tabla
nombre como se muestra en el siguiente código:

Tablas Externas
Las tablas externas se almacenan fuera del programa en discos y otrosmedios de
comunicación.
Las tablas se almacenan externamente cuando son grandes, contienen información que
cambia con frecuencia, y son utilizados por más de un programa.
Programas pueden acceder a tablas externas en los medios de almacenamiento donde
residen, cada tiempo que necesitan ser referenciados. O bien, la tabla se puede cargar en
Working-Storage y procesado interno.
La decisión de cargar una tabla externa en un programa se basa en el tamaño de la tabla
(cuántas entradas y bytes de
datos que contiene) y el número de veces que el programa necesita recuperar datos de la
tabla (frecuencia de acceso).
Se debe cargar una tabla externa en Working-Storage si el programa tiene que acceder a
él con frecuencia durante la ejecución.
Por ejemplo, supongamos que el la tabla externa tiene 250 entradas.
El programa que utiliza la tabla procesa un archivo de entrada. El archivo de entrada
contiene 1000 registros.
Cada registro de el archivo de entrada debe validarse con una entrada en la tabla externa.

En la Figura 370.1.3, puede ver cómo se carga una tabla que está almacenada en un
archivo en un programa.
Esto ocurre durante la ejecución del programa. Los datos de entrada de la tabla
es READ entry-by-entry INTO la definición de la tabla de entrada.

Figura 370.1.3 - Carga de una tabla externa


Al cargar esta tabla para uso interno, el programa accedería (externamente) cada entrada
en la tabla y colóquela en Working-Storage.
Este acceso externo se denomina operación de I/O o de Input/Output.
Las I/O son instrucciones muy caras en la computadora. Se necesitarían 250 I/O para
poner la tabla externa en el
Working-Storage del programa (Una I/O para cada entrada en la tabla). Luego, cada vez
que se necesita validar un registro del archivo de entrada, la entrada de la tabla ahora se
puede acceder internamente.
El acceso interno a una tabla no requiere cualquier I/O. Por lo tanto, se necesitaron solo
250 I/O para procesar los 1000 registros en la entrada del archivo.
De hecho, no importa cuán grande sea el archivo de entrada, siempre tomaría solo 250
E/S.

Sin embargo, si el programa no cargó la tabla externa en Working-Storage, entonces cada


vez que se procesó un registro de entrada, el programa tendría que acceder a la tabla
externamente.
El programa completaría una I/O por cada registro en el archivo. Dado que hay 1000
registros en el archivo, se completaría 1000 I/O.

En comparación, cuando la tabla externa se cargó en Working-Storage, el programa usó


solo 250 I/O para procesar los 1000 registros en lugar de usar 1000 I/O. En este ejemplo,
fue más eficiente cargar la tabla externa en el programa en tiempo de ejecución.
Por lo general, el analista de diseño decidirá si no se debe cargar una tabla externa en un
programa.

La definición de una tabla externa es muy similar a la definición de una tabla interna.
Excepto que no hay una cláusula REDEFINES en el nivel 05.
Esto es porque los datos de la tabla se almacenan fuera del programa, no hay nada
almacenado dentro del programa a redefinir.

El siguiente código es la definición de almacenamiento de trabajo de una tabla externa


para la tabla de cuentas. Esta vez la tabla contiene 1.000 entradas en tabla:
Es muy importante que la cláusula OCCURS tenga suficientes entradas definidas para
el tamaño del archivo externo. Por ejemplo, si se define que OCCURS que tiene
1000 entradas y el archivo tiene 1100 entradas, el programa ABEND
cuando intentó cargar la entrada 1001.

Compare esto con el ejemplo de código 370.1.4 que muestra el correspondiente


definición de la tabla Interna que ha visto anteriormente en esta sección:
Ejemplo de código 370.1.4 - Definición de tabla interna
Codificación de la lógica de carga

Dado que las entradas de la tabla no están definidas en el almacenamiento de trabajo para
un tabla, debe cargar la tabla durante el tiempo de ejecución antes de poder acceder
la información allí almacenada.
Esta función se suele realizar una vez en el Párrafo de limpieza.

La Figura 370.1.4 ilustra la lógica de carga de tablas cuando la tabla que está cargando
se almacena en un medio externo, como un archivo:

1. Abra el archivo que contiene los datos de la tabla.


2. Inicialice el switch FIN DE ARCHIVO.
3. Establezca el índice en 1.
4. Lea la primera entrada de la tabla.
5. Mueva los datos de la entrada de la tabla a la definición de la entrada de la tabla.
6. Incrementa el índice en 1.
7. Lea la siguiente entrada de la tabla.

Los pasos 5 a 7 se repiten hasta que se hayan cargado todas las entradas de la tabla y se
alcanza el final del archivo de la tabla.

Figura 370.1.4 - Lógica de carga de tablas


La Figura 370.1.5 ilustra cómo la lógica de carga de tablas se traduce en COBOL
código.
Los números en el diagrama de procedimiento corresponden a cada pieza de código para
hacer esta relación más clara.

Figura 370.1.5 - Código de carga de tablas


SET
Antes de que pueda comenzar la carga de la tabla, debe ESTABLECER el índice de la
tabla en 1, para que coloque el índice en la primera entrada de la tabla.
Deberías estar familiarizado con la declaración SET de los interruptores de codificación.
Al codificar la tabla de carga lógica, se utilizan dos nuevas versiones de la instrucción
SET:

El INDEX NAME (nombre-índice) es la variable definida en la cláusula INDEXED BY


en la definición de tabla de Working-Storage. En la tabla de cuentas (ACCOUNT
TABLE), el nombre del índice es ACCOUNT-INDEX (Cuenta Índice).

Tenga en cuenta que este es el único caso en el que es aceptable codificar 1 en el


Procedure Division.
La razón de esto es que 1 es el único valor que nunca se usará en esta declaración.

Tenga en cuenta que este es el único caso en el que es aceptable codificar 1.


Observe cómo se establece e incrementa el valor de ACCOUNT-INDEX en
declaraciones 3 y 6. A medida que cada entrada de la tabla se mueve desde el registro de
entrada ACCOUNT-ENTRY-REC a la entrada de la tabla ACCOUNT-ENTRY, se le
asigna un valor de índice.
Antes de que se lea la primera entrada de la tabla, el valor del índice se establece en 1.
Antes de que se lea la segunda entrada de la tabla, el valor del índice se incrementa a 2, y
así sucesivamente, hasta que se hayan eliminado todas las entradas de la tabla cargado e
indexado en el Procedure Division.
La razón de esto es que 1 es el único valor que nunca se usará en esta declaración.
Beneficios de una Tabla

Interna
Cuando las tablas son pequeñas, es más eficiente almacenarlas y acceder a ellas como
archivos internos de la tabla.
La lógica y los recursos de procesamiento requeridos para manipular el los datos en una
tabla interna son mínimos ya que los datos no tienen que cargarse en el programa desde
un dispositivo de almacenamiento externo.

Externa
Cuando una tabla será utilizada por más de un programa, es mejor codificarla
externamente para que la misma tabla no tenga que ser codificada y almacenada en
cada programa que lo utiliza.
Esto no sólo ahorra tiempo de desarrollo, sino también reduce el esfuerzo de
mantenimiento ya que los datos solo necesitan ser actualizados en un lugar.
Codificar la tabla externamente también asegura que todos los programas compartan
la información más actual.

Las tablas externas a veces se cargan en la sección de Working-Storage de un programa.


Esto se hace si:

 Es necesario acceder a la tabla con frecuencia durante la ejecución del programa.


 Cargar la tabla minimizará las I/O.
Resumen de la sección

Las tablas en los programas COBOL se utilizan para organizar la información con el fin
de facilitar el almacenamiento, la recuperación y la manipulación. A menudo se utilizan
en programas.
Recuperar ciertos valores, verificar información y acumular información.
Esta sección cubrió la terminología básica de la tabla y el arco para definir
tables en Working-Storage.

Las tablas se pueden definir interna o externamente:

 Las tablas internas se almacenan completamente dentro del programa. Las tablas
suelen ser codificadas internamente cuando son pequeñas, contienen datos que
cambian con poca frecuencia, y son utilizados por un solo programa.

 Las tablas externas se almacenan fuera del programa en discos y otros medios de
comunicación.
Las tablas se codifican externamente cuando son grandes, contienen información
que cambia con frecuencia, y son utilizados por más de un programa.
Esto minimiza el esfuerzo de mantenimiento y asegura que todos los programas
deben
tener acceso a los datos de la tabla más actualizados.
Se pueden cargar tablas externas en tiempo de ejecución y se accede internamente o
se puede acceder a ellos en el medio de almacenamiento donde residen.

Las tablas internas están codificadas en Working-Storage. Cada entrada de la tabla se


codifica como un 10 FILLER, con un VALOR igual al contenido de esa entrada.

La definición de tabla para una tabla interna contiene la cláusula REDEFINES, para
redefinir los datos de la tabla.
La definición de la tabla identifica el nombre de la tabla, el nombre de una entrada de la
tabla, el número de entradas de la tabla, el nombre del índice y el orden y la longitud de
los campos de la tabla.

Dado que las tablas externas se almacenan fuera del programa, a veces es más
eficiente para cargarlos en tiempo de ejecución y colocarlos en Working-Storage.
Esto depende de la frecuencia de acceso y del tamaño de la tabla.
Cuándo Las tablas externas se cargan internamente, esta función generalmente se realiza
en el Housekeeping paragraph. (inicializa)
Section 2 Búsqueda e impresión de tablas

Introducción
La sección anterior demostró cómo definir tablas y cargar tablas en tu programa Esta
sección le mostrará cómo buscar una entrada en una tabla, y cómo procesar una tabla
secuencialmente para que pueda acceder a cada entrada en esa tabla. Haría esto cuando
quisiera imprimir una tabla.

Aprenderá dos métodos para buscar una entrada en una tabla:


 Búsqueda en serie
 Búsqueda binaria

Búsqueda de tablas
Buscar en una tabla significa recorrer una tabla para buscar una entrada en particular
eso quiere decir.
La computadora usa el índice para realizar un seguimiento de dónde se encuentra
la búsqueda. Siga la Tabla 370.2.1 mientras se explica este concepto.

La computadora busca en una tabla comparando el valor que se busca, el argumento de


búsqueda, a varios valores de la tabla.
El campo que puede contener a este valor se denomina key (llave o Clave) o campo key.
En la Tabla 370.2.1, estamos buscando información en el número de cuenta 6589, por lo
que el argumento de búsqueda es 6589 y el el campo clave es Número de cuenta.

Aunque el número de cuenta resulta ser la primera columna de la tabla, el el campo llave
(key) en realidad puede ser cualquier columna dentro de la tabla. Por ejemplo, la key
(llave) el campo podría haber sido Nombre del cliente de la cuenta o Fecha de apertura de
la cuenta.
Tabla 370.2.1 - Argumento de busqueda y campo clave

Existen dos tipos básicos de técnicas de búsqueda:


la búsqueda serial básica y la búsqueda binaria. Usted elige la técnica de búsqueda
apropiada, dependiendo depende del tamaño de la tabla y de cómo se ordene la tabla.

La búsqueda serial básica


Cuando la tabla es relativamente pequeña, la búsqueda en serie es la más rápida de las
dos tecnicas de busqueda.
También es la única búsqueda posible si el campo clave no está en orden ascendente o
descendente.

Ver Tabla 370.2.2. En una búsqueda en serie, la computadora busca en cada tabla
entrada, una a la vez, hasta que el argumento de búsqueda coincida con el campo key
(llave o clave).
la computadora usa el índice para realizar un seguimiento de dónde se encuentra en la
tabla. Cada vez la computadora verifica una entrada de la tabla y no encuentra ninguna
coincidencia, se agrega 1 al valor del índice y se accede a la siguiente entrada de la tabla.

La búsqueda continúa hasta que se encuentra una coincidencia entre el argumento de


búsqueda y el campo key (llaveo clave) (un acierto), o hasta que se alcance el final de la
tabla (sin acierto).
La siguiente tabla ilustra la secuencia de procesamiento de una búsqueda en serie.
Tabla 370.2.2 - Búsqueda serial básica

Por ejemplo, supongamos que queremos saber la fecha de apertura de una cuenta
específica número. Usaríamos la siguiente lógica de búsqueda en serie:
1. Antes de que comience la búsqueda, el índice se establece en 1.
2. El programa busca cada entrada de la tabla hasta el customer's account (cuenta del
cliente) si encuentra el número, o hasta que se alcanza el final de la tabla. si
encuentra account number (cuenta del número), el programa comprueba la fecha de
apertura.

De lo contrario, el programa llama a una rutina de error que indica que no se encontró
ninguna coincidencia. en la tabla.

El ejemplo de código 370.2.1 muestra cómo se traduce esta lógica en código COBOL.
Hay dos verbos COBOL que se utilizan para realizar una búsqueda en serie:
SET y SEARCH.

Ejemplo de código 370.2.1 - Código básico de búsqueda en serie

SET
Antes de que pueda comenzar la búsqueda en serie, debe ESTABLECER el índice
de la tabla en 1, para coloque el puntero en la primera entrada de la tabla. Ya
deberías estar familiarizado con la declaración SET de codificar interruptores y
cargar tablas externas. Recuerde que el formato básico de la instrucción SET es:

donde "nombre-índice" es la variable definida en la cláusula INDEXED BY en el


Definición de tabla de trabajo-almacenamiento.
En este ejemplo, el nombre del índice es ACCOUNT-INDEX.
SEARCH
Se realiza una búsqueda en serie utilizando el verbo COBOL SEARCH. la sintaxis de
SEARCH es:

La instrucción SEARCH incluye las siguientes cláusulas COBOL:


 AT END
 WHEN
 END-SEARCH

Los siguientes pasos guían el procesamiento de la sentencia SEARCH:

1. Dado que está buscando una entrada de tabla específica, el nombre de la entrada de
la tabla es el nombre de datos especificado en la sentencia SEARCH.
esta es la misma tabla nombre de entrada especificado en la cláusula OCCURS de
la definición de tabla en Working-Storage.

2. La cláusula AT END le dice al programa qué hacer si toda la tabla está buscado y
no se encuentra ninguna coincidencia (sin éxito).

3. La cláusula WHEN especifica los criterios para una coincidencia (acierto) y le dice
al programa qué hacer cuando se encuentra una coincidencia.

4. La cláusula END-SEARCH marca el final de la declaración de búsqueda. es el


delimitador END-IF, END-SEARCH es específico de COBOL/2.
Este código específico se ilustra en el Ejemplo de código 370.2.2.

También podría gustarte