Pregunta

Estoy empezando a aprender acerca de COBOL. Tengo algunos programas de escritura de experiencia que tienen que ver con bases de datos SQL y supongo que estoy confundido cómo las tiendas de COBOL y recupera los datos que se almacena en una computadora central, por ejemplo. Sé que no es como bases de datos relacionales, pero cada programa de ejemplo que he visto toma los datos directamente desde la línea de comandos y sé que no es así como en el mundo real los programas COBOL procesan los datos. ¿Puede alguien explicar o me muestran un buen recurso que puede explicarlo?

¿Fue útil?

Solución

COBOL es más que otra tercera lengua equipo generación. Es sólo un poco mayor que la mayoría que no quiere decir que es de algún modo incompleto (en realidad se trata con un poco de equipaje - pero eso es otra historia).

Al igual que con cualquier otro lenguaje de tercera generación, COBOL manipula los archivos de datos en más o menos la misma manera que lo haría en un programa C. Nada extraño, misterioso o mágico. Se abren los archivos, leer, escrita y cierran usando el archivo de E / S características de la lengua.

Varios mecanismos se utilizan para formar un enlace entre un archivo real y el programa. Los detalles aquí a menudo son específicos al sistema operativo que está trabajando bajo. En general, las implementaciones COBOL tratan de aislarse del entorno operativo a través de un nombre de archivo lógico en lugar de un nombre real. Esta indirección añadido es importante cuando se está escribiendo programas que será portado a diferentes plataformas (por ejemplo, escribir y prueba dentro de un IDE en una plataforma Windows y ejecute en un mainframe).

Los siguientes ejemplos se refieren a un entorno de mainframe de IBM.

Dentro del mundo del mainframe de IBM, se encuentra que los programas se ejecutan como lotes o (por ejemplo CICS) en línea. No voy a describir cómo configurar para el archivo de E / S bajo CICS (que es una larga historia). Los programas que se utilizan para manipular archivos son por lo general por lotes. Aquí es una ilustración aproximada de cómo funciona un programa por lotes:

  1. Los programas por lotes se ejecutan a través de JCL. JCL se utiliza para identificar el programa a ejecutar (la declaración de EXEC ') e identificar los archivos que el programa hará referencia mediante declaraciones 'DD'. La función de una declaración de DD es formar una conexión lógica entre un archivo real y un nombre de su programa COBOL hará referencia cuando se quiere hacer referencia al archivo (este es el mecanismo de aislamiento se mencionó anteriormente). Por ejemplo,

    JCLDDNAM DD DSN='HLQ.MY.FILE'...
    

    sería asociar el nombre de 'DD' 'JCLDDNAM' en el fichero llamado 'HLQ.MY.FILE'. Esta parte es dependiente de la plataforma por lo que los detalles son específicos para el entorno operativo.

  2. En la sección de su programa COBOL 'Archivo-CONTROL', se conecta el 'DD NOMBRE' definido en su JCL con el nombre que va a utilizar en cada estado de E / S para hacer referencia a ese archivo. Esta conexión se define utilizando la 'Seleccionar' comunicado.
    Por ejemplo,

    SELECT MYFILE
    ASSIGN JCLDDNAM
    remainder of select
    

    hace una conexión entre cualquier archivo que guardan relación con 'JCLDDNAM' en su 'JCL' a 'MIARCHIVO' que se hará referencia más adelante en las declaraciones de COBOL de E / S. La declaración SELECT en sí es parte de la norma ISO COBOL. Sin embargo, muchas implementaciones COBOL definen algunas extensiones no estándar para facilitar diversas peculiaridades a sus subsistemas de archivos.

  3. Abrir, leer, escribir, cerrar archivos dentro del 'procedimiento de repartición' de programar utilizando el nombre de 'MIARCHIVO' como en:

    OPEN MYFILE  
    READ MYFILE  
    CLOSE MYFILE  
    

Lo anterior se simplifica enormemente, y hay una multitud de maneras de hacer esto dentro de COBOL. La comprensión de la imagen completa se llevará a un verdadero esfuerzo, tiempo y práctica. Las declaraciones de E / S ilustrados anteriormente son parte del estándar de COBOL, pero todos los vendedores tendrán sus propias extensiones.

COBOL de IBM compatible con una amplia gama de organizaciones de archivos y métodos de acceso. Puede revisar la aquí para obtener la sintaxis y las reglas para la manipulación de archivos, sin embargo, la Guía del usuario ofrece una gran cantidad de buenos ejemplos para la lectura / escritura de archivos (que tendrá que cavar un poco, pero todo está dispuesto para usted).

La configuración para hacer referencia a una base de datos SQL a través de un programa COBOL es algo diferente, pero implica la creación de una conexión entre el programa y el subsistema de base de datos. Dentro del mundo de IBM se trata duno throug JCL, otros entornos utilizarán diferentes mecanismos.

COBOL de IBM utiliza un pre-procesador o co-procesador para integrar el acceso de base de datos y el intercambio de datos. Por ejemplo, el siguiente código recuperar algunos datos de una base de datos DB2:

MOVE 1234 TO PERSON-ID
EXEC SQL
  SELECT  FIRST_NAME,  LAST_NAME
  INTO   :FIRST-NAME, :LAST-NAME
  FROM PERSON
  WHERE PERSON_ID = :PERSON-ID
END-EXEC
DISPLAY PERSON-ID FIRST-NAME LAST-NAME

Las cosas entre EXEC SQL y END-EXEC es una bastante simple instrucción de selección de SQL. Los nombres precedidos por dos puntos son variables del lenguaje COBOL que se utilizan para pasar datos a DB2 o recibir de nuevo. Si alguna vez ha codificado rutinas de acceso a la base de datos antes de que esto debe ser muy familiar para usted. Este enlace ofrece una introducción sencilla a la incorporación SQL en un programa de IBM COBOL Enterpirse.

Por cierto, IBM Enterprise COBOL es capaz de trabajar con documentos XML también. Lo siento por la fuerte inclinación de IBM, pero que es el ambiente que estoy más familiarizado.

Espero que esto le ayudará a comenzar en la dirección correcta.

Otros consejos

¿Quién dijo que no se puede utilizar SQL para recuperar datos de una aplicación COBOL, tal vez sin gastar dinero?

Una empresa que solía trabajar, fue lo que hizo - con SQLite. Esta pequeña joya de una biblioteca de dominio público compila las sentencias SQL a código de bytes, entonces los ejecuta.

Al reemplazar el nivel de "back-end" de SQLite con una interfaz personalizada a la biblioteca de C que se ocupa de archivos Cobol, fue posible consultar los datos Cobol de otros idiomas, Python en ese caso. Funcionó - dentro de los límites de SQLite, por supuesto, pero fue estable, parecía lo suficientemente relacional y que ni siquiera necesita un servidor de base de datos: -)

entornos lotes COBOL tradicionales utilizan una 'sección de datos' del programa COBOL para declarar directamente las conexiones de base de datos, que a su vez están definidos en la JCL. Desde COBOL de SQL anterior, los habría tendido a ser otros tipos de bases de datos, pero es probable que IBM hizo el trabajo con SQL DB / 2. Imagino que obtendrá otra respuesta de alguien más cerca de estas cosas. Si nos fijamos en los preprocesadores SQL disponible para su uso con otros idiomas que obtendrá la idea -. Un cursor se convierte en un tipo de datos nativo y ofrece resultados de la consulta a las variables nativas

Mainframe Cobol utiliza SQL incrustado (un poco como SQLj), por ejemplo:.

División procedimiento.

   Exec SQL
        Select col1, col2
          from myTable
        into :ws-col1, :ws-col2
        where col0 = :col0
   End-Exec

En este caso, las variables de sistema principal WS-col0, ws-col1 y ws-col2 se definen en la sección de almacenamiento de trabajo. La interfaz de base de datos gestiona conseguir que los datos en el lugar correcto.

Muy fácil en comparación con el material distribuido en realidad.

Todo el que he trabajado han utilizado en COBOL, que habló con una base de datos relacional tienda de mainframe de IBM. En general, que ha sido DB2 de IBM. Tenga en cuenta que DB2 es una base de datos relacional que se ejecutan en los mainframes de. También se puede ejecutar en Windows o Linux.

Hace veinte años una manera predominante para introducir datos en la base de datos DB2 de mainframe era utilizar CICS. CICS es un software "nivel de presentación" que comminicates con pantallas de entrada de datos basada en caracteres. Considere el CICS equivelant funcional de PHP o ASP.NET.

Hoy en día hay muchas más opciones para conseguir datos en DB2. CICS sigue siendo una opción, pero su "capa de presentación" podría ser PHP, ASP.NET, Win Forms, Java JSF, Powerbuilder. La clave es que su plataforma de desarrollo tendría que ser capaz de trabajar con un controlador de base de datos DB2. La plataforma podría ser Windows, Linux y posiblemente otros.

Mi punto es que los datos pueden entrar en la base de datos DB2 principal en un muchos aspectos de muchas plataformas. El lenguaje COBOL podría estar involucrado en la entrada de datos, generación de informes, la alteración de datos de COBOL, etc. Pero sólo podría ser parte de una aplicación de nivel múltiple que podrían ser parte de Windows, Web y mainframe. Podría dar ejemplos específicos, si usted tiene más información acerca de la aplicación que va a trabajar con a su prácticas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top