2010-03-13 51 views
9

Estoy empezando a aprender sobre COBOL. Tengo cierta experiencia en la escritura de programas que tratan con bases de datos SQL y supongo que estoy confundido sobre cómo COBOL almacena y recupera datos que se almacenan en un mainframe, por ejemplo. Sé que no son como las bases de datos relacionales, pero cada programa de ejemplo que he visto toma datos directamente de la línea de comandos y sé que no es así como los programas COBOL del mundo real procesan los datos. ¿Alguien puede explicarme o mostrarme un buen recurso que pueda explicarlo?¿Cómo almacena COBOL y recupera los datos?

Respuesta

20

COBOL es simplemente otro lenguaje de computadora de tercera generación. Es un poco más antiguo que la mayoría, lo que no significa que esté incompleto de alguna manera (en realidad viene con bastante equipaje, pero esa es otra historia).

Al igual que con cualquier otro lenguaje de tercera generación, COBOL manipula los archivos de datos de la misma manera que lo haría en un programa C. Nada extraño, misterioso o mágico al respecto. Los archivos se abren, leen, escriben y cierran usando las características de E/S del archivo del idioma.

Se utilizan varios mecanismos para formar un enlace entre un archivo real y el programa. Los detalles aquí a menudo son específicos del sistema operativo en el que está trabajando. En general, las implementaciones de COBOL intentan aislarse del entorno operativo a través de un nombre de archivo lógico en lugar de un nombre real. Esta indirección adicional es importante cuando escribe programas que se trasladarán a diferentes plataformas (por ejemplo, escribir y probar dentro de un IDE en una plataforma Windows, y luego ejecutar en un mainframe).

Los siguientes ejemplos se relacionan con un entorno IBM Mainframe.

Dentro del mundo de mainframe de IBM, encontrará que los programas se ejecutan ya sea por lotes o en línea (por ejemplo, CICS). No describiré cómo configurar la E/S de archivo en CICS (esa es una larga historia). Los programas que se utilizan para manipular archivos suelen ser por lotes. Aquí es una ilustración aproximada de cómo funciona un programa por lotes:

  1. programas por lotes se ejecutan a través de JCL. JCL se utiliza para identificar el programa que se ejecutará (instrucción 'EXEC') e identificar a qué archivos hará referencia su programa utilizando sentencias 'DD'. La función de una Declaración DD es formar una conexión lógica entre un archivo real y un nombre al que hará referencia su programa COBOL cuando quiera referirse al archivo (este es el mecanismo de aislamiento mencionado anteriormente). Por ejemplo,

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

    podría asociar el nombre de 'DD' 'JCLDDNAM' en el fichero llamado 'HLQ.MY.FILE'. Esta parte depende de la plataforma, por lo que los detalles son específicos del entorno operativo.

  2. En la sección 'FILE-CONTROL' de su programa COBOL, conecta el 'DD NOMBRE' definido en su JCL con el nombre que usará en cada instrucción de E/S para referenciar ese archivo. Esta conexión se define mediante la instrucción 'SELECT'.
    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í misma es parte del estándar ISO COBOL. Sin embargo, muchas implementaciones de COBOL definen algunas extensiones no estándar para facilitar varias peculiaridades a sus subsistemas de archivos.

  3. Abrir, leer, escribir, cerrar archivos dentro de la 'PROCEDIMIENTO DE DIVISIÓ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 formas de hacer esto dentro de COBOL. Comprender la imagen completa requerirá mucho esfuerzo, tiempo y práctica. Las declaraciones de E/S ilustradas arriba son parte del estándar COBOL, pero cada proveedor tendrá sus propias extensiones.

IBM COBOL admite una amplia gama de organizaciones de archivos y métodos de acceso. Puede consultar el manual de referencia de lenguaje de IBM Enterprise COBOL here para obtener la sintaxis y las reglas para la manipulación de archivos. Sin embargo, el User Guide proporciona muchos buenos ejemplos para leer/escribir archivos (tendrá que excavar un poco, pero todo está arreglado fuera para ti).

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 configuración de una conexión entre su programa y el subsistema de la base de datos. En el mundo de IBM esto se hace a través de JCL, otros entornos utilizarán diferentes mecanismos.

IBM COBOL utiliza un preprocesador o coprocesador para integrar el acceso a la 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 de host COBOL utilizadas para pasar datos a DB2 o recibirlos de nuevo. Si alguna vez ha codificado las rutinas de acceso a la base de datos, esto le resultará muy familiar. Este link proporciona una introducción simple a la incorporación de sentencias SQL en un programa IBM Enterpirse COBOL.

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

Espero que esto lo inicie en la dirección correcta.

+0

que casi le da al hombre de la cabeza. ¡Gracias por tomarte el tiempo de escribir tanto! –

+0

@MC Emperor, cuando realice ediciones, incluya la razón en el cuadro provisto. Si cambia una palabra, asegúrese de hacerlo correctamente. –

+0

@BillWoodger Puede verlo fácilmente en el historial de revisiones. –

1

Los entornos por lotes COBOL tradicionales usan una 'sección de datos' del programa cobol para declarar directamente las conexiones de bases de datos, que a su vez están configuradas en JCL. Como COBOL es anterior a SQL, tendrían que ser varios otros tipos de bases de datos, pero es probable que IBM haya hecho que SQL funcione con DB/2. Me imagino que obtendrás otra respuesta de alguien más cercano a estas cosas. Si observa los preprocesadores SQL disponibles para su uso con otros lenguajes, obtendrá la idea: un cursor se convierte en un tipo de datos nativo y entrega resultados de consulta a variables nativas.

+0

ah. Entonces mi comprensión puede ser un poco sesgada. COBOL se trata más bien de la manipulación de los datos en su lugar y no hace mucho con la recuperación de los datos. La razón principal por la que hice esta pregunta es que estoy yendo a una pasantía este verano y no estoy haciendo cobol allí, pero eso es lo que usan para procesar sus datos financieros y estaba confundido de cómo obtendría los datos en cobol a proceso. Me gusta mucho tu respuesta, ¡gracias! –

+0

@bmargulies: -1: asume IBM –

0

Todas las tiendas de mainframe de IBM en las que he trabajado han usado COBOL, que hablaba con una base de datos relacional. En general, ese ha sido el DB2 de IBM. Tenga en cuenta que DB2 es una base de datos relacional que se ejecuta en mainframes. También se puede ejecutar en Windows o Linux.

Hace veinte años, una forma predominante de ingresar datos en la base de datos de mainframe de DB2 era utilizar CICS. CICS es un software de "nivel de presentación" que cominica con pantallas de ingreso de datos basadas en caracteres. Considere CICS el equivalente funcional de PHP o ASP.NET.

Hoy en día existen muchas más opciones para obtener 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 debería ser capaz de trabajar con un controlador de base de datos DB2.La plataforma podría ser Windows, Linux y posiblemente otras.

Mi punto es que los datos pueden acceder a la base de datos de mainframe de muchas maneras desde muchas plataformas. El lenguaje COBOL podría estar involucrado en la entrada de datos, informes, alteración de datos COBOL, etc. Pero podría ser solo parte de una aplicación de varios niveles que podría ser parte de Windows, web y mainframe. Podría dar ejemplos específicos si tiene más información sobre la aplicación con la que trabajará durante su pasantía.

2

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

Una empresa para la que solía trabajar, hizo exactamente eso - con SQLite. Esta pequeña joya de una biblioteca de dominio público compila sentencias de SQL a bytecode, y luego las ejecuta.

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

1

Mainframe Cobol utiliza SQL incorporado (algo así como SQLj), por ejemplo :

División de procedimientos.

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 la base de datos administra la obtención de esos datos en el lugar correcto.

Muy fácil en comparación con las cosas distribuidas en realidad.

+0

Me gusta tu respuesta también. El lugar donde realizo la pasantía ahora usa cobol para su computadora central y he estado expuesto a un poco de eso junto con el CICS que usan para conectar los datos a nuestras aplicaciones java ee. –

Cuestiones relacionadas