En esta segunda parte vamos a ver cómo acceder a la base de datos ADABAS.
La base de datos ADABAS es "no relacional" con ficheros en vez de tablas, registros en vez de filas y campos en vez de columnas.
Para entenderlo veremos un ejemplo de un programa natural que accede a una "tabla".
Fichero(tabla) EMPLEADOS:
11111JOSE MARTINEZ
33333LAURA VAZQUEZ
44444SUSANA LOPEZ
22222JAVIER GUTIERREZ
Donde el primer campo es el número de empleado y el segundo campo el nombre del empleado.
JCL:
//**************EJECUCION NATURAL*******************
//**************************************************
//PROG1 EXEC NATBAT
//CMPRINT DD SYSOUT=*
//CMSYNIN DD *
LOGON SYSEXBAT
EXECUTE PGMNAT2
FIN
//SYSIN DD *
11111
/*
Programa:
DEFINE DATA LOCAL
1 EMPLEADOS-VISTA VIEW OF EMPLEADOS
2 NUM-EMPLEADO (N5)
2 NOMBRE-EMPLEADO (A30)
1 #NUM-EMPL (N5)
END-DEFINE
INPUT #NUM-INPUT
READ EMPLEADOS-VISTA BY NUM-EMPLEADO = #NUM-INPUT
DISPLAY NUM-EMPLEADO 3X NOMBRE-EMPLEADO
END-READ
END
Donde:
EMPLEADOS-VISTA sería una vista del fichero EMPLEADOS, que podría tener más campos que los que nosotros mostramos en la LOCAL.
#NUM-EMPL es una cariable que recibimos de la SYSIN.
La sentencia READ recuperará todos los registros de la tabla que cumplan
NUM-EMPLEADO >= #NUM-IMPUT ordenados por NUM-EMPLEADO.
Si quisiésemos recuperar sólo el empleado con número = #NUM-INPUT tendríamos que codificarlo así:
READ EMPLEADOS-VISTA BY NUM-EMPLEADO FROM #NUM-INPUT THRU #NUM-INPUT
Utilizaremos el DISPLAY en lugar del WRITE para que quede más bonito :P y "3X" indica que deje 3 espacios en blanco entre cada columna.
Resultado para NUM-EMPLEADO = #NUM-INPUT:
NUM NOMBRE
EMPLEADO EMPLEADO
-------- --------------------
11111 JOSE MARTINEZ
22222 JAVIER GUTIERREZ
33333 LAURA VAZQUEZ
44444 SUSANA LOPEZ
Resultado para NUM-EMPLEADO FROM #NUM-INPUT THRU #NUM-INPUT:
NUM NOMBRE
EMPLEADO EMPLEADO
-------- --------------------
11111 JOSE MARTINEZ
Más ejemplos de accesos a base de datos.
READ(1) --> lee por "mayor o igual" y recupera sólo 1 registro; equivaldría a nuestro "fetch first row only".
Sentencia: READ(1) EMPLEADOS BY NUM-EMPLEADO = 30000
Resultado: 33333LAURA VAZQUEZ
READ --> lee por "mayor o igual" y recupera todos los registros; equivaldría a nuestro cursor.
Sentencia: READ EMPLEADOS BY NUM-EMPLADO = 30000
Resultado: 33333LAURA VAZQUEZ
44444SUSANA LOPEZ
FIND --> se utiliza cuando el campo que buscamos es clave primaria del fichero ADABAS. Lee por "igual".
Sentencia: FIND EMPLEADOS WITH NUM-EMPLEADO = 33333
Resultado: 33333LAURA VAZQUEZ
UPDATE --> actualiza un registro del fichero ADABAS.
INSERT --> inserta un registro en el fichero ADABAS.
DELETE --> borra un registro del fichero ADABAS.
Este es un ejemplo muy sencillo de acceso a base de datos con Natural/ADABAS, pero espero que sirva para que os hagáis una idea de cómo funciona.
Como en el ejemplo de la parte I, he probado el programa con la versión de Natural que ya teníamos, y una versión de ADABAS que se puede descargar de la página de Software AG.
Para la próxima vemos cómo utilizar ADABAS en un programa COBOL : )
2 comentarios:
Ejemplo sencillo, pero super bien explicado, tenia años-luz que no veia algo de Natural, yo soy Cobol 100% (sin CICS ni DB2), por lo que me gustaria conocerlo, entenderlo y dominarlo, saludos a todo el CONSULTORIO.
Atte: BHB
Natural / Adabas,,, me podrian mandar por favor un link para descargar la version de windows 7,,, saludos