Natural Adabas

Anuncio
NATURAL-ADABAS
PASCUAL MARTINEZ CRUZ
0.- Introducción.
1.- Tipos de Datos.
2.- Comentarios.
3.- Declaración de variables.
4.- Asignación de valores a Variables.
5.- Arrays.
6.- Operaciones con arrays.
7.- Objetos de NATURAL.
8.- Operaciones Aritméticas.
9.- Bucles (Tipos).
10.- Instrucciones Condicionales.
11.- Trabajo con Ficheros.
12.- Trabajo con Vistas de Adabas.
13.- Subrutinas.
14.- Llamadas a rutinas.
15.- Edicion y compilación en entorno Mainframe.
PASCUAL MARTINEZ CRUZ
26-11-2007
[email protected]
0.- INTRODUCCIÓN:
El presente documento pretende ser una resumida guía de referencia introductoria para
para programadores que trabajen por primera vez con Natural Adabas en entorno
Mainframe.
Adabas es una base de datos diseñada por Software AG para sistemas críticos y Natural
el lenguaje de programación para operar con esta base de datos.
Es conveniente tener un manual de referencia sobre Natural para poder sacar más
partido de este lenguaje de programación.
1.- TIPOS DE DATOS:
A  Alfanumérico.
B  Binario.
C  Atributo de Control.
D  Fecha.
F  Punto Flotante.
I  Entero.
L  Lógico.
N  Numérico.
P  Numérico Empaquetado.
T  Hora.
2.- COMENTARIOS:
Se comenta código con * y /*
* Comentario para una línea entera.
MOVE 2 TO A
/* Comentario para el resto de línea
3.- DECLARACION DE VARIABLES:
Todos los programas NATURAL empiezan con un bloque de declaración de variables.
Las variables se encierran en este tipo de bloque:
DEFINE DATA PARAMETER
1 Area-de-parametros.
LOCAL
01 Variable 1 (A3)
01 Vvar REDEFINES Variable 1
02 S-var (A1)
02 SS-var (A2)
END-DEFINE
En PARAMETER se incluyen las áreas de datos que sirven como comunicación de
entrada y salida entre los distintos objetos NATURAL.
En LOCAL se declaran las variables,o vistas de ADABAS que se vayan a usar
localmente en el programa.Podemos encontrarnos con la instrucción:
PARAMETER USING Area_de_parametros.
Esta instrucción declara Area_de_parametros como el area de comunicación de E/S
entre los distintos objetos de NATURAL.
LOCAL USING Area_de_parametros.
Esta instrucción hace que Area de parámetros sea usada localmente en una llamada a
cierto subprograma.
Las variables van precedidas de un número que corresponde con el nivel de declaración
al que pertenecen.
Se empieza por nivel 1 o 01, los niveles 02,03 …(sucesion secuencial) etc nos indican
que esas variables son subdivisiones de la variable que esta declarada un nivel
inmediatamente superior.
4.- ASIGNACION DE VALORES A VARIABLES:
La asignación se realiza mediante las instrucciones MOVE,ASSING o el operador :=
Ejemplos:
MOVE 5 TO VALOR
VAR1 := VAR2 (VAR1 pasa a valer lo que contiene VAR2)
ASSING VALOR = 5
ASSING ROUNDED VALOR = 199.999 (Redondea el valor asignado).
5.- ARRAYS:
DEFINICIONES
*ARRAY(3)  Define una matriz de una dimensión de 3 ocurrencias.
ETIQUETA.FIELD(A 20/5)  Define una matriz de un campo de la base de datos
referenciada en la sentencia marcada por ‘ETIQUETA’, con formato alfanumérico,
longitud 20 y 5 ocurrencias.
* ARRAY(N7.2/1:5,10.12,1:4)  Define una matriz con formato N7.2, de 3
dimensiones con 5 ocurrencias en la primera dimensión ,12 en la segunda y 4 en la
tercera.
6.- OPERACIONES CON ARRAYS:
REFERENCIA A LOS ELEMENTOS DEL ARRAY.
*ARRAY(1)  Referencia la primera ocurrencia de una matriz de una dimensión.
*ARRAY(7:12)  Referencia las ocurrencias de 7 a 12 en una matriz de una
dimensión.
*ARRAY(I+5)  Referencia la ocurrencia I+5 de una matriz de una dimensión.
*ARRAY(5,3:7,1:4)  La referencia se realiza en una matriz de 3 dimensiones , a la
ocurrencia 5 de la primera dimensión ,las ocurrencias de 3 a la 7 en la segunda
dimensión, y las ocurrencias 1 a 4 de la tercera.
*ARRAY(*)  Todas las ocurrencias de una dimensión.
7.- OBJETOS DE NATURAL:
PROGRAMA:
Programa Natural.
SUBPROGRAMA:
Similar a una librería, los subprogramas son utilizados por programas Natural.
SUBRUTINA:
Porción de código Natural donde el bloque del programa es solo una subrutina.
HELPRUTINA:
Subrutina para mostrar cuadros de ayuda en una aplicación Natural.
COPYCODE:
Porción de código que se puede incluir en un programa Natural (similar a una
macro),suele contener código para un tratamiento general de errores.
TEXTO:
Documentos de texto para describir programas,útil si carecemos del diccionario Predict.
MAPA:
Estructura de código Natural para crear interfaces de aplicación.
AREA GLOBAL DE DATOS:
Fuente donde se declaran variables para usarlas de forma global en una aplicación
Natural.
AREA LOCAL DE DATOS:
Fuente donde se declaran variables para usarlas de forma local en un modulo de una
aplicación Natural.
AREA DE PARAMETROS:
Fuente donde se declaran variables o vistas para pasarlas como parámetros a
subprogramas,subrutinas externas etc.
CLASE:
Las clases son unos objetos que se usan en conjunto con NaturalX para crear
componentes basados en aplicaciones cliente/servidor.
DIALOGO:
Los diálogos son objetos que se usan en conjunto con programación orientada a eventos
para crear aplicaciones en entorno gráfico.
8.- OPERACIONES ARITMETICAS:
SUMA:
ADD 3 TO B
ADD 4 5 GIVING B
/* B vale 3 */
/* B vale 9 */
COMPUTE RES = NUM1 + NUM2
RESTA:
SUBTRAC 4 FROM B
/* Resta 4 a B*/
SUBTRAC 6 FROM 11 GIVING B /* Resta 6 a 11 y lo guarda en B */
COMPUTE RES = NUM1 - NUM2
MULTIPLICACION:
A=3
MULTIPLY A BY 3
MULTIPLY A BY 3 GIVING B
/* A vale 9 */
/* B vale 9 */
COMPUTE RES = NUM1 * NUM2
DIVISION:
DIVIDE divisor INTO dividendo
A = 20
DIVIDE 5 INTO A
DIVIDE 5 INTO A GIVING B
DIVIDE 5 INTO 31 REMAINDER C
/* A vale 4 */
/* B vale 4 */
/* C vale 1 (resto de la división) */
COMPUTE RES = NUM2 / NUM1
/* RES vale la división entera
9.- BUCLES (TIPOS):
Bucle FOR.
#indice se refiere a la variable de control del bucle.
Lo que sigue al TO es el número de iteraciones del bucle.
STEP número , marca el incremento de la variable de control.
FOR #indice 1 TO 5
Sentencias
END-FOR
FOR #indice 1 TO 5 STEP 2
Sentencias
END-FOR
Bucle REPEAT.
Bucle sin condición de salida.Se sale cuando se encuentra una instrucción
ESCAPE,STOP o TERMINATE.
REPEAT
Sentencias
ESCAPE,STOP,TERMINATE
/* Estas instrucciones se usan para
romper el flujo de ejecución del
bucle */
END-REPEAT
Bucle con condición de salida.Se sale del bucle cuando la condición de while sea
falsa.
REPEAT WHILE #R <=8
Sentencias
END-REPEAT
Bucle con condición de salida.Se sale del bucle cuando la condición de UNTIL
sea verdadera.
REPEAT UNTIL #R <= 8
Sentencias
END-REPEAT
10.- INSTRUCCIONES CONDICIONALES:
Sentencia IF
IF condición THEN
IGNORE
sentencias
ELSE
sentencias
END-IF
Sentencia DECIDE FOR
FIRST/EVERY ,indica si se procesa solamente la primera condición que se
cumpla o cada una de las condiciones que se cumplan.Se pone solo una no ambas.
DECIDE FOR { FIRST } CONDITION
{ EVERY }
{WHEN condición lógica sentencias}
{WHEN ANY condición lógica
sentencias}
{WHEN ALL condición lógica
sentencias}
WHEN NONE {IGNORE}
{sentencias}
END-DECIDE
Sentencia DECIDE ON
FIRST/EVERY ,indica si se procesa solamente la primera condición que se
cumpla o cada una de las condiciones que se cumplan.Se pone solo una pero no ambas.
DECIDE ON {FIRST} VALUE OF operando1
{EVERY}
{VALUE operando2}
{ANY VALUE sentencias}
{ALL VALUE sentencias}
NONE VALUE
{IGNORE}
Sentencias
END-DECIDE
11.- TRABAJO CON FICHEROS:
READ WORK FILE
Lee datos de un fichero secuencial físico.
READ WORK [FILE] número de work-file [ONCE]
{RECORD {operando 1 [ FILLER nX}]}…}
{[AND][SELECT] {[{OFFSET n}] operando 2}…}
{[AND][SELECT] {[{FILLER nX}] operando 2}…}
END-READ
WRITE WORK FILE
Graba registros dea un fichero secuencial físico.
WRITE WORK [FILE] número de work-file [VARIABLE] operando 1
NEWPAGE
Avanza una nueva página
NEWPAGE [(rep)] [{EVEN [IF][TOP][OF][PAGE]}]
[{[{IF}]
[LESS][THAN] operando 1[LINES][LEFT]}]
[{[{WHEN}] [LESS][THAN] operando 1[LINES][LEFT]}]
[[WITH] TITLE]
PROCESS
Permite leer y escribir ficheros , gestionar VTOC y catalogos,colas JES etc.
PROCESS nombre de vista USING operando 1 = operando 2 GIVING operando 3
12.- TRABAJO CON VISTAS DE ADABAS:
DELETE
DELETE [RECORD] [IN] [STATEMENT] [(r)]
Borra un registro de la base de datos.
FIND
FIND [{ALL}]
[RECORDS][IN][FILE] Nombre de view
[{operando 1}]
[RECORDS][IN][FILE] Nombre de view
[{FIRST}]
[RECORDS][IN][FILE] Nombre de view
[{NUMBER}]
[RECORDS][IN][FILE] Nombre de view
[{UNIQUE}]
[RECORDS][IN][FILE] Nombre de view
[PASSWORD-claúsula]
[CIPHER-claúsula]
WITH-claúsula
[COUPLED-claúsula]
[SORTED BY-claúsula]
[RETAIN-claúsula]
[WHERE-claúsula]
[IF NO RECORDS FOUND-claúsula]
Sentencias
Selecciona una serie de registros desde la Base de Datos.
GET
GET [IN][FILE] nombre de vista
[PASSWORD = operando 1]
[CIPHER = operando 2]
[RECORD] {operando 3, *ISN} operando 4 ….
Lee un registro con un ISN (Número de Secuencia Interna)
GET SAME
GET SAME [(r)] operando 1
Se utiliza para volver a leer el registro que esta siendo procesado actualmente.
GET TRANSACTION DATA
GET TRANSACTION DATA operando 1 ….
Se utiliza para leer los datos salvados con una sentencia END OF TRANSACTION
anterior.
HISTOGRAM
HISTOGRAM [{operando 1}] [VALUE] [IN] [FILE] Nombre de view
[PASSWORD = operando 2]
[VALUE][FOR][FIELD]operando 3
[STARTING : ENDING - claúsula]
[WHERE-claúsula]
Sentencias
END-HISTOGRAM
Leer los valores de campos de la base de datos definidos como descriptor,subdescriptor
o superdescriptor.
END TRANSACTION
END TRANSACTION [operando 1 …]
Indica el final de una transacción lógica.
OBTAIN
OBTAIN operando 1 ….
Se utiliza para hacer disponible un rango de ocurrencias de una matriz de la base de
datos en almacenamiento continuo.
READ
{READ}
{BROWSE} [(operando 1)] [RECORDS][IN][FILE] Nombre de view
[PASSWORD = operando 2]
[CIPHER = operando 3]
[Especificación secuencia rango]
[WHERE - claúsula]
Sentencias ….
END-READ
Se utiliza para leer registros de la base de datos.
STORE
STORE [RECORD][IN][FILE] Nombre de view
[PASSWORD = operando 1]
[CIPHER = operando 1]
[[{USING}] NUMBER operando 3][(r)]
[[{GIVING}] NUMBER operando 3][(r)]
{[USING] SAME [RECORD][AS][STATEMENT][(r)]}
{[{SET,WITH}]{operando 4 = operando 5}…}
Se utiliza para añadir un registro a la base de datos.
UPDATE
UPDATE [RECORD] [IN] [STATEMENT] [(r)]
Se utiliza para actualizar uno o mas campos de un registro de la base de datos.
13.- SUBRUTINAS:
Para crear una subrutina dentro de nuestro programa escribimos el código de nuestra
subrutina procedemos así:
DEFINE SUBROUTINE NOMBRE_DE_LA_SUBRUTINA
/*
Código de nuestra subrutina
*/
END-SUBROUTINE
Para crear una subrutina externa:
Creamos primero un objeto Natural de tipo subrutina,dentro de este objeto definimos en
DATA PARAMETER las variables que usara la subrutina, y después el código de la
subrutina.
DEFINE DATA PARAMETER
/*
Variables
*/
END-DEFINE
DEFINE SUBROUTINE NOMBRE_DE_LA_SUBRUTINA
/*
Código de nuestra subrutina
*/
END-SUBROUTINE
END
14.- LLAMADAS A RUTINAS:
CALL ‘RUTINA’ #PARAMETRO1 #PARAMETRO2
/* Rutina esta en un lenguaje
/* distinto de NATURAL
CALLNAT ‘RUTINA’ #PARAMETRO1 #PARAMETRO2
/* Rutina esta escrito
/* en NATURAL
/* CALL FILE Se usa para llamar a programas que ha escrito el
Usuario y acceden a un fichero de datos que no es de ADABAS
*/
CALL FILE ‘RUTINA’ #PARAMETRO1 #PARAMETRO2
Sentencias
END-FILE
PERFORM SUBRUTINA [AREA_DE_PARAMETROS] /* subrutina externa
PERFORM SUBRUTINA
/* Subrutina interna
15.- EDICIÓN Y COMPILACIÓN EN ENTORNO
MAINFRAME:
COMANDOS DE EDICION:
Los siguientes comandos deben ejecutarse en el área de edición del editor.
.I  Inserta una línea.
.In  Inserta n líneas.
.C  Copia una línea.
.X  Marca el principio de selección de un bloque de lineas.
.Y  Marca el final de la selección de un bloque de líneas.
.CX-Y  Copia un bloque de líneas.
.D  Elimina una línea.
.DX-Y  Borra la selección de líneas.
Tecla Fin  Borra una línea.
.L Deja la línea como estaba anteriormente.
COMANDOS DEL EDITOR:
Los siguientes comandos deben ejecutarse en el área de comando del editor.
RESET Quita la selección de líneas.
SCAN Busca texto.
SA Salva el programa.
SA Nombre Salva el programa con el nombre Nombre.
STRUCT Sangra el código fuente.
COMANDOS DE COMPILACION Y EJECUCION:
C  Chequea la sintaxis.
STOW  Compila el programa.
RUN  Ejecuta el programa.
Descargar