miércoles, 23 de febrero de 2011

Natural/ADABAS para coboleros: parte I.

¿Qué es Natural? Es un lenguaje de programación de la empresa Software AG que también se utiliza en entornos mainframe. La base de datos que lo acompaña es ADABAS. Del mismo modo que Natural podría tener similitudes con COBOL, ADABAS no las tiene en absoluto con DB2.
Hoy día no tengo conocimiento de que quede algún banco en España que lo utilice, pues el único que conocí de primera mano lo estaba migrando a COBOL. Creo que telefónica todavía tenía una parte en Natural/ADABAS...

En este artículo nos haremos una idea de cómo codificar en Natural asociándolo a un programa COBOL. Tomaremos como ejemplo el "Ejemplo 1" del manual de COBOL para principiantes.

Vamos a construir un programa que recogerá datos de la SYSIN de un JCL, y displayará la inforamción contenida en él.

JCL:

//**************EJECUCION NATURAL*******************
//**************************************************
//PROG1 EXEC NATBAT
//CMPRINT DD SYSOUT=*
//CMSYNIN DD *
LOGON SYSEXBAT
EXECUTE PGMNAT1
FIN
//SYSIN DD *
JOSE LOPEZ VAZQUEZ %
HUGO CASILLAS DIAZ %
JAVIER CARBONERO %
PACO GONZALEZ
/*


Donde EXEC NATBAT indica que vamos a ejecutar un programa natural en modo batch(puede cambiar según instalación).
CMPRINT DD SYSOUT=* indica que la información "displayada" se quedará en la cola CMPRINT (no lo vamos a guardar en un fichero).
En CMSYNIN DD * hace logon a la librería e indicamos el programa q vamos a ejecutar (PGMNAT1).
En SYSIN incluimos la información que va a recibir el programa. El '%' indica que la información continúa en la siguiente línea.


Programa:

DEFINE DATA LOCAL
 1 WI-INDICE(P4)
 1 #WX-NOMBRE1(A20)
 1 #WX-NOMBRE2(A20)
 1 #WX-NOMBRE3(A20)
 1 #WX-NOMBRE4(A20)
 1 WX-TABLA-NOMBRES
   2 WX-NOMBRE(A20/4)
END-DEFINE

INPUT #WX-NOMBRE1 #WX-NOMBRE2 #WX-NOMBRE3 #WX-NOMBRE4

MOVE #WX-NOMBRE1 TO WX-NOMBRE(1)
MOVE #WX-NOMBRE2 TO WX-NOMBRE(2)
MOVE #WX-NOMBRE3 TO WX-NOMBRE(3)
MOVE #WX-NOMBRE4 TO WX-NOMBRE(4)

FOR WI-INDICE = 1 TO 4
   WRITE 'WX-NOMBRE:'WX-NOMBRE(WI-INDICE)

END


Donde el área "DEFINE DATA LOCAL" equivaldría a nuestra WORKING-STORAGE; ahí definiríamos las variables/copys que necesitásemos para el programa. En nuestro caso:

WI-INDICE: empaquetado(P) de 4 posiciones. Equivaldría a un 9(4) COMP-3. Los índices para bucles en natural deben ser siempre numéricos (N) o empaquetados (P).
#WX-NOMBRE1: alfanumérico (A) de 20. Equivaldría a nuestro PIC X(20). La almohadilla indica que es una variable que se recibe por INPUT.
WX-TABLA-NOMBRES: sería una tabla interna donde el campo WX-NOMBRE es un alfanumérico (A) de 20 y se repite 4 veces. Equivaldría a nuestro OCCURS 4 TIMES.

A continuación codificaríamos el "PROCESO" del programa. En nuestro caso:

INPUT: recoge los datos introducidos por SYSIN.
MOVE/TO: para informar variables existen otras opciones:
WX-NOMBRE(1) := #WX-NOMBRE1 ó
ASSIGN WX-NOMBRE(1) = #WX-NOMBRE1

FOR: es uno de los bucles de natural. Las sentencias se repetirán "PARA" WI-INDICE = 1, =2, =3 e =4.
WRITE: escribe en el CMPRINT, que equivaldría a nuestra SYSOUT. La sentencia WRITE equivaldría a nuestro DISPLAY. En natural también existe la sentencia DISPLAY. La diferencia con el WRITE está en que el DISPLAY da formato a los datos, crea columnas con cabeceras por ejemplo.

El resultado usando WRITE sería:

WX-NOMBRE: JOSE LOPEZ VAZQUEZ
WX-NOMBRE: HUGO CASILLAS DIAZ
WX-NOMBRE: JAVIER CARBONERO
WX-NOMBRE: PACO GONZALEZ


Y usando DISPLAY sería:

      WX-NOMBRE:
--------------------

JOSE LOPEZ VAZQUEZ
HUGO CASILLAS DIAZ
JAVIER CARBONERO
PACO GONZALEZ


Esto es un ejemplo muuuy sencillo, lo he probado con la versión de demo que se puede descargar desde la página de Software AG. Eso sí, sólo el código que los JCLs no se puede.
Para la próxima veremos el ejemplo de acceso a ADABAS más sencillo, y así tener una idea de como funciona esta base de datos : )

5 comentarios:

Anónimo dijo...

Muy bien explicado todo pero con todo respeto y sin que te ofendas, no quedaría mejor la palabra "DESPLEGADA" que "displayada"?
Al decir "displayada" quieres decir desplegada verdad?
Atentamente Gerardo Nicolás Murillo gnmurillo@hotmail.com

Tallian dijo...

Pues sí! Lo cierto es que "displayar" es la palabra que solemos usar donde yo trabajo, aunque obviamente ese verbo no existe... jeje
Es una patada al diccionario en toda regla, totalmente de acuerdo^^

Anónimo dijo...

Conozco natural desde hace varios años y hay un error de sintaxis, faltó un end-for ... Al compilar aparecería el error con la indicación... La página excelente. Felicidades!!

Anónimo dijo...

Estamos buscando DBA Adabas bajo Linux, ubicación Madrid. Contrato Indefinido. rrhh@i3einformatica.com

Alexander The Greek dijo...

alguien sabe cuanto cuesta adabas??