Cuando estamos implementando un programa Cobol con acceso a DB2, una de las cosas que tenemos que incluir en el mismo es la declaración de las tablas DB2, junto con todos los campos que las componen, y la declaración de las variables auxiliares que vamos a emplear para recoger los registros de dichas tablas. El DCLGEN nos permitirá crear de forma automática toda esta estructura de datos.
La herramienta DCLGEN sirve para realizar la generación de objetos DCL. El DCL (Data Control Language) es la parte del lenguaje SQL destinada al control de los datos. Así que, dicho de otro modo, el DCLGEN nos permite realizar la generación de la parte del código SQL que contiene las variables necesarias para el tratamiento de las tablas DB2 desde los programas Cobol.
Obviamente, estas sentencias DCL también se podrían generar manualmente, pero siempre será más cómodo realizar la tarea mediante un generador automático como el DCLGEN. Una vez hayamos aprendido cómo se opera con él, lo más probable es que nunca dejemos de usarlo.
Los pasos a seguir para realizar la generación de un objeto con código DCL son los siguientes, suponiendo que nos encontramos en el menú principal POM (Primary Option Menu) del ISPF.
1º) Seleccionamos la opción 12 - Subsystems - DB/DC Subsystems. Se nos abrirá una ventana mostrando las diversas opciones disponibles.
12 Subsystems DB/DC Subsystems
2º) Opción D - DB2I: Seleccionamos la opción D - DB2I - Interactive Database 2. Así entraremos en el menú principal (POM) de la herramienta DB2I.
D DB2I Interactive Database 2
3º) Opción 2 - DCLGEN: Seleccionamos la opción 2 - DCLGEN - Generate SQL and source language declarations.
2 DCLGEN (Generate SQL and source language declarations)
4º) En el panel DCLGEN tendremos que introducir los parámetros requeridos para la generación del objeto DCL.
- SOURCE TABLE NAME: Aquí tendremos que introducir el nombre de la tabla para la cual deseamos que se genere su objeto DCL asociado. Por ejemplo, nosotros especificamos la tabla EQUIPOS.
1 SOURCE TABLE NAME ===> EQUIPOS
- TABLE OWNER: Aquí habrá que especificar el nombre del usuario propietario de la tabla.
2 TABLE OWNER ..... ===> SYSTEM1
- DATA SET NAME: En este campo se debe especificar el nombre (y la ubicación) del objeto DCL que va a generar la herramienta DCLGEN. Por ejemplo, nosotros queremos un objeto llamado SEQUIPOS que deberá crearse en la librería JJ00.FACTURAS.DCLGEN.DATA.
4 DATA SET NAME ... ===> 'JJ00.FACTURAS.DCLGEN.DATA(SEQUIPOS)'
- ACTION: Se provisionará el comando ADD si vamos a generar un nuevo objeto DCL o el comando REPLACE si se va a cambiar la estructura de un objeto ya existente.
6 ACTION .......... ===> REPLACE
- INDICATOR VARS: Si queremos que nuestro objeto DCL incluya la declaración de las Variables de Indicador Nulo para los campos de la tabla que lo requieran, entonces tendremos que indicar YES en este parámetro.
12 INDICATOR VARS .. ===> YES
5º) Tras especificar todos los parámetros anteriores y pulsar INTRO, nos aparecerá un mensaje indicando que la generación se ha llevado a cabo correctamente.
DSNE904I EXECUTION COMPLETE, MEMBER SEQUIPOS REPLACED
***
A continuación, iríamos a la librería especificada en DATA SET NAME (en nuestro ejemplo, la JJ00.FACTURAS.DCLGEN.DATA) y podríamos verificar la existencia del nuevo objeto DCL generado.
Si nos asomamos al interior del objeto, veremos que su contenido tendrá un aspecto similar al siguiente:
******************************************************************
* DCLGEN TABLE(SYSTEM1.EQUIPOS) *
* LIBRARY(JJ00.FACTURAS.DCLGEN.DATA(SEQUIPOS)) *
* LANGUAGE(COBOL) *
* QUOTE *
* INDVAR(YES) *
* ... IS THE DCLGEN COMMAND THAT MADE THE FOLLOWING STATEMENTS *
******************************************************************
EXEC SQL DECLARE EQUIPOS TABLE
( EQUINO CHAR(3) NOT NULL,
EQUINAME VARCHAR(36) NOT NULL,
ENTNO CHAR(6),
EMPREQUI CHAR(3) NOT NULL,
CITYNAME VARCHAR(16)
) END-EXEC.
******************************************************************
* COBOL DECLARATION FOR TABLE SYSTEM1.EQUIPOS *
******************************************************************
01 DCLEQUIPOS.
10 EQUINO PIC X(3).
10 EQUINAME.
49 EQUINAME-LEN PIC S9(4) USAGE COMP.
49 EQUINAME-TEXT PIC X(36).
10 ENTNO PIC X(6).
10 EMPREQUI PIC X(3).
10 CITYNAME.
49 CITYNAME-LEN PIC S9(4) USAGE COMP.
49 CITYNAME-TEXT PIC X(16).
******************************************************************
* INDICATOR VARIABLE STRUCTURE *
******************************************************************
01 IEQUIPOS.
10 INDSTRUC PIC S9(4) USAGE COMP OCCURS 5 TIMES.
******************************************************************
* THE NUMBER OF COLUMNS DESCRIBED BY THIS DECLARATION IS 5 *
******************************************************************
El próximo día seguiremos viendo el procedimiento que hay que seguir para poder hacer uso del contenido del objeto DCL desde el programa Cobol en el que vamos a operar con el fichero DB2. Recordemos que, al fin y al cabo, la finalidad del DCL es que nos facilite el intercambio de información entre el entorno SQL DB2 y el entorno Host Cobol.
Dicho esto, ya sólo nos queda emplazaros a la segunda parte del post, donde terminaremos de ver la forma en que debe utilizarse la herramienta DCLGEN. Disfrutad del Cobol mientras tanto.
Saludos.
[off-topic]
ResponderEliminarVeo ese código y recuerdo cuando por allá en el año 1989 estábamos haciendo un sistema administrativo en COBOL y el Ing. a cargo me criticó porque yo hacía el manejo de fecha con el año en cuatro dígitos y me dijo algo como:
"qué crees tú, que para ese año estos sistemas estarán funcionando? quizás ni siquiera se utilice ya el COBOL....."
Pues como vemos muchos de los sistemas escritos en COBOL han sobrevivido y por consiguiente el COBOL.
Saludos.
Interesante tu anécdota, Jorge. Gracias por compartirla.
ResponderEliminarLa verdad es que a mi me pasó algo parecido. Cuando empecé a trabajar en Cobol (año 1997) me dijeron que ese lenguaje habría desaparecido al cabo de unos 10 años, cosa que evidentemente no ha sucedido...
Curiosamente, hace poco (año 2015) uno de nuestros clientes ha elaborado un nuevo plan para eliminar el Cobol DB2 de sus sistemas de aquí a 15 años, es decir, para el año 2030.
¿Se repetirá la misma historia? Quién sabe, la verdad es que, viendo los precedentes, ya no me atrevo a afirmar que el Cobol habrá desaparecido en 2030...
Saludos.