Escolar Documentos
Profissional Documentos
Cultura Documentos
Curso Natural Fundamentals
Curso Natural Fundamentals
Contedo
78
193
333
399
413
427
Exerccios ..........................................................
472
1950
Cdigo
de
Mquina
1960
COBOL
Cdigo
Assembler
4
1970
1980
1990
Linguagens
de
2000
Fim
do
TELEX
4. gerao
Windows
Bibliotecas do Natural
Bibliotecas do Natural
Ncleo
Natural
Natural
DBMS
ADABAS
Online Natural
Batch Natural
Buffer Pool
Buffer Pool
User User
User
Work Work
Work
Area Area
1
...
12
Area
15
16
Modo Report
til para a criao de programas simples e pequenos,
que no envolvem dados complexos e/ou lgica de
programao.
Modo Estruturado
usado em aplicaes complexas, fornecendo uma
estrutura clara e bem-definida do programa.
Esses programas so mais fceis de serem lidos,
facilitando tambm sua manuteno;
Todos os campos usados no programa so definidos
numa nica localizao.
17
Modularizao
18
Modularizao
Modelo no-modular
Um objeto
19
Modularizao
Modelo modular
20
21
Instrues
READ
DISPLAY
FIND
Comandos
LOGON
RUN
SAVE
WRITE...
23
24
Help Online
Help Online
Faz isto...
HELP CHECK
HELP USER 1234
HELP 0082
HELP LAST
Help Online
27
rea de Dados
Variveis do Sistema e Definidas pelo Usurio
Dados do Banco
Escolhendo a rea de Dados
28
Data Areas
rea de Dados
Funo
(GDA)
Parameter Data Area
(PDA)
Application-
Independent
Variables (AIVs)
Context
Data Areas
30
Data Areas
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
******************************************************************
* EXEMPLO DE DEFINICAO DA AREA DE DADOS GLOBAL, PARAMETER,
*
* LOCAL EXTERNA E LOCAL INTERNA
*
* NOME DO PROGRMA : PEXEMPLO
*
******************************************************************
DEFINE DATA
GLOBAL USING MAINGLOB
PARAMETER
1 #PARM1 (A10)
1 #PARM2 (A20)
LOCAL USING LDA1
LOCAL
1 PEOPLE VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 NAME
1 #DATA (A6)
END-DEFINE
31
Data Areas
32
Data Areas
33
Data Areas
Lembre-se!
As GDAs s podem ser criadas como estruturas
externas;
A GDA deve ser o objeto mais antigo da aplicao. Caso
voc precise criar uma GDA numa aplicao existente ou
modific-la, todos os demais objetos devero ser
recompilados;
Deve haver apenas uma GDA por aplicao;
Mltiplas GDAs podem ser usadas dentro de uma
aplicao somente quando usada conjuntamente com
subprogramas.
Programas, subrotinas e rotinas de help podem acessar
a GDA.
34
Data Areas
Data Areas
Lembre-se!
A PDA deve definir todos os campos que
esto sendo passados para ela;
Os campos devem ser definidos na seqncia
exata, com os mesmos formatos e tamanhos
que foram definidos no objeto chamador (a no
ser que se use a clusula by value). Os nomes
dos campos podem ser diferentes no objeto
chamador. Isto permite ao objeto ser usado por
diferentes aplicaes;
User views no podem ser definidas na PDA.
36
Data Areas
Lembre-se!
Os parmetros so passados para um
subprograma/routine por referncia (conforme
seus endereos). A opo BY VALUE, significa
que os valores atuais dos parmetros so
passados e no apenas o endereo, assim,
formato e tamanho no precisam coincidir;
Exemplo: Define data parameter
#NAME (A20) BY VALUE
Data Areas
0010 ******************************************************************
0020 * EXEMPLO DO USO DA PARAMETER DATA AREA
*
0030 * NOME DO PROGRMA : PDAEXEMP
*
0040 ******************************************************************
0050 DEFINE DATA
0060 LOCAL
0070 1 EMP VIEW OF EMPLOYEES
0080
2 PERSONNEL-ID
0090
2 NAME
0100
2 INCOME
0110
3 SALARY (1)
0120
2 DEPT
0130 1 #TAX (P6.3)
0140 END-DEFINE
0150 *
0160 READ EMP BY NAME
0170 CALLNAT 'SUBPEXEM' SALARY (1) #TAX
/* Passando parmetros para a PDA
0180 DISPLAY NAME PERSONNEL-ID SALARY (1) #TAX DEPT
0190 END-READ
0200 END
38
Data Areas
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
*************************************************************
* EXEMPLO DE UM SUBPROGRAMA QUE RECEBE PARAMETROS
*
* NOME DO SUBPROGRAMA: SUBPEXEM
*
*************************************************************
DEFINE DATA
PARAMETER
1 #SALARY (P9)
PDA
1 #TAX
(P6.3)
END-DEFINE
*
COMPUTE #TAX = #SALARY * .045
END
39
Data Areas
Data Areas
Lembre-se!
Em tempo de execuo, os dados locais so
usados somente pelo objeto que define a LDA.
Dois objetos programticos podem compartilhar
as definies de uma LDA, mas no podem
compartilhar os dados;
Defina somente aqueles campos que voc vai
usar no seu programa. Se voc define mais
campos do que realmente precisa, acaba
gastando o espao de seu buffer.
41
Lembre-se!
Como os demais campos, voc deve criar as
user-defined variables dentro da estrutura da
instruo DEFINE DATA, ou ento numa rea
de dados externa;
Defina primeiro o formato de um campo e
depois o tamanho;
Costuma-se iniciar as variveis definidas pelo
usurio com o caracter (#);
Os nomes dos campos podem ter entre 1-32
caracteres.
43
Formato
Significado
Tamanhos Permitidos
Alfanumrico
1-253
Numrico (descompactado)
Numrico (compactado)
Inteiro
1, 2 ou 4
Ponto Flutuante
4 ou 8
Binrio
1-126
Atributo de Controle
(2)*
Data
Hora
Lgico
* Os nmeros entre parnteses indicam valores que voc no pode alterar, portanto, para essas
variveis, no preciso definir o tamanho.
44
Variveis do Sistema
Variveis do Sistema
Nome
Contedo
*NUMBER
Nmero de registros
*COUNTER
*PROGRAM
*USER
Identificao do usurio
*LANGUAGE
*CURSOR
*ERROR-NR
Variveis do Sistema
Nome
Formato/Tamanho
*DATN
N8
YYYYMMDD
*DATE
A8
DD/MM/YY
*DATI
A8
YY-MM-DD
*DATJ
A5
YYDDD
*DATX
Formato interno
*TIME
A10
HH:MM:SS.T
*TIMN
N7
HHMMSST
*TIMX
Formato interno
Para cada varivel de sistema DATA corresponde outra que inclui o ano com 4 dgitos, exemplo:
*DAT4E, *DAT4I, *DAT4J.
47
48
51
Database
Physical Files
A B C D
Arquivo A
Arquivo B
DDM1
DDM2
Arquivo C
DDM3
DDM5
DDM4
52
Arquivo D
DDM6
DDM7
Externa
Externa
Interna
LDA
PDA
54
55
56
Edio de Mscaras
57
Mscaras de Edio
Mscaras
de Edio
EM=999.99EM=9(3).9(2)EM=ZZZZZ9
EM=Z(5)9(1)
EM=X^XXXXX
EM=X(1)X(5)
EM=XXX..XX
EM=X(3)..X(2)
Exemplo A
Exemplo B
Valor
Sada
Valor
Sada
36732
367.32
-530
005.30-
BLUE
B LUE
A19379
A 19379
BLUE
BLU..E
AAB01
AAB..01
58
579
579
Mscaras de Edio
de Edio
Valor
Sada
Valor
Sada
100
F1F0F0
ABC
C1C2C3
Use *DATU
01/05/96
EM=HHH
EM=H(3)
EM=MM/DD/YY
Exemplo B
Exemplo A
Mscaras
Use *TIME
08.54.12.7
TRUE
ON
EM=OFF/ON
59
Use *DATU
02/30/96
Use *DAT4U
02/30/1996
Use *TIME
14.32.54.3
FALSE
OFF
Mscaras de Edio
Descrio
DD, ZD
Dia
MM, ZM
Ms
YYYY, YY, ZY
Nmero da semana
WW, ZW
Ano
JJJ, ZZJ
Dia juliano
NN, N(n)
Nome do dia
LL, L(n)
Nome do ms
Ano em numerais romanos
60
Mscaras de Edio
Descrio
Dcimos de segundo
SS, ZS
Segundos
II, ZI
Minutos
HH, ZH
Hora
AP
AM/PM
61
Mscaras de Edio
Sada:
Monday, September 28th
62
Valores Iniciais
Exemplo
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200
0210
0220
******************************************************************
* ILUSTRA O USO DO EDIT MASK E DOS INIT
******************************************************************
DEFINE DATA
LOCAL
1 #COLOR
(A10)
INIT <'TURQUOISE'>
(EM=X' 'X' 'X' 'X^X^X^X^X^X)
1 #SSN
(N9)
(EM=999-99-9999)
1 #MONTH
(A3/12) INIT <'JAN','FEV','MAR','ABR','MAI','JUN',
'JUL','AGO','SET','OUT','NOV','DEZ'>
1 #COUNTRY-MENU
(9)
2 #SELECT
(N1)
INIT <1,2,3,4,5,6,7,8,9>
2 #COUNTRY-TEXT (A20)
INIT (1) <'AUSTRALIA'>
(2) <'CANADA'>
(3) <'INGLATERRA'>
(4) <'FRANCA'>
(5) <'ALEMANHA'>
(6) <'JAPAO'>
(7) <'ESPANHA'>
(8) <'ESTADOS UNIDOS'>
(9) <'IOGUSLAVIA'>
64
Exemplo
Continuao
0230
0240
0250
0260
0270
0280
0290
0300
0310
0320
0330
0340
0350
0360
0370
1 #DATE
(D)
INIT <*DATX>
1 #TIME
(T)
INIT <*TIMX>
1 #REPEAT
(L)
INIT <TRUE>
END-DEFINE
*
#SSN := 123456789
*
WRITE NOTITLE
/ 10T '=' #COLOR (CD=YE)
// 10T '=' #SSN (CD=GR)
// 10T '=' #DATE #TIME (CD=PI)
// 10T '=' #MONTH(1:12)(CD=RE)/
*
DISPLAY NOHDR #COUNTRY-MENU (*)
END
65
Exemplo
Sada:
#COLOR: T U R Q U O I S E
#SSN: 123-45-6789
#DATE: 02-10-02 18:00:50
#MONTH: JAN FEV MAR ABR MAI JUN JUL AGO SET OUT NOV DEZ
1
2
3
4
5
6
7
8
9
AUSTRALIA
CANADA
INGLATERRA
FRANCA
ALEMANHA
JAPAO
ESPANHA
ESTADOS UNIDOS
IOGUSLAVIA
66
Redefinio de Campos
Notao FILLER nX
68
Exemplo
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200
******************************************************
* ILUSTRA DECLARACAOREDEFINE COM A OPCAO DE FILLER
******************************************************
DEFINE DATA
LOCAL
1 CAR VIEW OF VEHICLES
2 PERSONNEL-ID
2 MAKE
2 DATE-ACQ
2 REDEFINE DATE-ACQ
3 FILLER 4X
3 #MONTH (A2)
3 FILLER 2X
END-DEFINE
*
FIND (1) CAR WITH PERSONNEL-ID = '11100106'
WRITE NOTITLE / 10T '=' MAKE
/ 10T '=' DATE-ACQ 5X '=' #MONTH
END-FIND
END
69
Exemplo
Sada:
MAKE: VW
DATE-ACQ:
19860115
70
#MONTH: 01
Lembre-se!
Campos do banco de dados no podem ser
movidos ou copiados;
Os formatos e tamanhos dos campos do
banco de dados no podem ser mudados;
Os campos do banco dados no podem ser
renomeados;
Os campos do banco de dados podem ser
redefinidos usando a instruo REDEFINE;
Os valores de inicializao no podem ser
definidos para campos do banco de dados.
72
F Leng Index/Init/EM/Name/Comment
- ---- -------------------------------
A
A
A
A
N
N
8
20
20
10
4.0
8.0
A
A
20
20
VEHICLES
/* INTERN.
/* LOCAL/GENERIC
/* LOCAL/GENERIC
/* LOCAL/GENERIC
/* INTERN.
/* INTERN.
Comando Generate
75
Comando .I(xxxxxxxx)
(somente para Nat. Mainframe)
Exemplo
I T L Name
All - -------------------------------V 1 CARS
2 REG-NUM
2 PERSONNEL-ID
2 MAKE
2 MODEL
2 COLOR
2 COLOUR
2 YEAR
*
1 #OPTION
*
V 1 EMPL
2 PERSONNEL-ID
*
*
77
F Leng Index/Init/EM/Name/Comment
- ---- -----------------------------VEHICLES
A
15 /* LOCAL FORMAT
A
8 /* INTERN.
A
20 /* LOCAL/GENERIC
A
20 /* LOCAL/GENERIC
A
10 /* LOCAL/GENERIC
A
10 /* LOCAL/GENERIC
N 4.0 /* INTERN.
/* INSERTED FROM SANPGM01
A
1
/* INSERTED FROM SANMAP01
EMPLOYEES
A
8
/* END OF SANMAP01
/* END OF SANPGM01
Introduo
Tomando uma deciso
Controle de loop
Varivel lgica
Resumo
78
Introduo
Condio Lgica
Para aplicar funes que envolvem o processamento condicional a seus
programas, voc pode usar qualquer uma das declaraes abaixo.
Condio Lgica
Descrio
IF/THEN/ELSE
DECIDE
REPEAT
FOR
Instruo IF
Essa instruo define uma condio lgica que executada
em funo da condio associada a ela. A declarao IF
contm 3 componentes:
IF - condio lgica que deve ser encontrada;
THEN - instruo a ser executada caso a condio seja
verdadeira;
ELSE - (opcional) instruo a ser executada caso a
condio seja falsa.
80
Lembre-se!
Voc pode usar expresses aritmticas com IF.
A clusula ELSE no essencial.
Valores em campos alfanumricos podem ser
checados para um formato e tamanho especficos, para
que voc saiba se pode ou no converter o valor para
us-lo em outro formato. Os formatos vlidos para
converso so: N, F, D, T, P, I. Use a funo VAL para
mover o valor para um campo de outro formato.
Exemplo
IF #ALPHA IS (N5,3) THEN
#NUM := VAL(#ALPHA)
END-IF
81
Lembre-se!
Voc pode combinar vrios operadores booleanos
dentro de uma nica instruo IF. A ordem em que os
operadores so avaliados a seguinte: (), NOT, AND e
OR.
Exemplo
IF YEAR = 80 THRU 89 AND MAKE=AUDI
AND (COLOR = GREEN OR =BLACK)
THEN
INPUT USING MAP CARMAP
END-IF
82
Lembre-se!
Voc pode usar a opo SUBSTRING para comparar
parte de um campo alfanumrico.
Exemplo
IF SUBSTRING (#DATE,1,2) GT 12
REINPUT
MS INCORRETO PARA A MSCARA (MMDDYYYY)
END-IF
83
Lembre-se!
Voc pode consultar posies selecionadas um
campo de acordo com um contedo especfico usando
a opo MASK.
Exemplo
IF #DATE NE MASK (DD/MM/YYYY)
REINPUT
POR FAVOR, ENTRE COM O FORMATO DD/MM/YYYY
END-IF
IF #SSN NE MASK (NNNNNNNNN)
REINPUT SSN MUST BE 9 DIGITS
END-IF
84
Lembre-se!
Exemplo
IF #FIELD NE MASK ( * E /)
REINPUT POR FAVOR, ENTRE COM UM NOME QUE TERMINE COM E
END-IF
85
Lembre-se!
Campos numricos tambm podem ser verificados
dessa forma.
Exemplo
86
Lembre-se!
Instrues que so embutidas dentro de outras
instrues so chamadas nested (aninhadas).
Instrues IF podem ser aninhadas desde que uma
condio leve a outra e assim por diante.
Instrues com as clausulas THEN ou ELSE, podem
por sua vez, conter outras declaraes IF/THEN/ELSE.
Essa alternativa de aninhar cria vrios caminhos que
possibilitam a execuo do programa.
87
0010 ************************************************************************
0020 * ILUSTRA O USO DA DECLARACAO IF
0030 ************************************************************************
0040 DEFINE DATA
0050 LOCAL
0060 1 EMPL VIEW OF EMPLOYEES
0070
2 NAME
0080
2 JOB-TITLE
0090
2 PERSONNEL-ID
0100
2 CITY
0110
2 COUNTRY
0120 1 #PID (A8)
0130 1 #CV1 (C)
0140 1 #CV2 (C)
0150 1 #MESSAGE (A60)
0160 END-DEFINE
0170 *
0180 REPEAT
0190
INPUT USING MAP 'EMPLMAP'
...
88
0200
IF #PID=' '
0210
ESCAPE BOTTOM
0220
END-IF
0230
FIND EMPL WITH PERSONNEL-ID = #PID
0240
MOVE (AD=P) TO #CV1 #CV2
0250
INPUT USING MAP 'EMPLMAP'
0260
IF #CV2 MODIFIED
0270
UPDATE
0280
END TRANSACTION
0290
MOVE (AD=P) TO #CV1 #CV2
0300
#MESSAGE := 'UPDATE DONE'
0310
INPUT USING MAP 'EMPLMAP'
0320
END-IF
0330
END-FIND
0340
RESET EMPL #CV1 #CV2 #MESSAGE #PID
0350 END-REPEAT
0360 *
0370
END
89
Lembre-se!
A opo MODIFIED usada para testar o contedo
de um campo que recebeu atributos dinamicamente foi
modificado durante a execuo de uma instruo
INPUT.
No primeiro input do mapa, as variveis de controle
so sempre referenciadas com o status NOT
MODIFIED na declarao INPUT.Sempre que o
contedo de um campo (que est ligado a uma varivel
de controle) modificado, a varivel de controle recebe
o status MODIFIED.
90
Instruo DECIDE
A instruo DECIDE permite a execuo de mltiplas opes
num processamento condicional. Assim como o IF, voc
avalia a condies lgicas ou valores de um campo. O tipo
de avaliao ir determinar o tipo de declarao DECIDE que
voc usar. H duas formas bsicas:
DECIDE FOR - refere-se a um ou mais campos.
DECIDE ON - baseia-se nos valores de uma nica
varivel.
91
92
Exemplo - DECIDE ON
DECIDE ON FIRST VALUE OF *PF-KEY
VALUE PF1
PERFORM ROUTINE-UPD
VALUE PF2
PERFORM ROUTINE-ADD
ANY VALUE
END TRANSACTION
WRITE RECORD HAS BEEN MODIFIED
NONE VALUE
IGNORE
END-DECIDE
93
Opes
FIRST
EVERY
ANY
ALL
for verdadeira.
Processa as declaraes se todas as condies especificadas forem
verdadeiras.
NONE
95
************************************************************************
* ILUSTRACAO O USO DA DECLARACAO IF
************************************************************************
DEFINE DATA LOCAL
1 PERSON VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 NAME
2 MAR-STAT
2 SEX
1 #STATUS (A25)
END-DEFINE
*
READ PERSON BY NAME
IF MAR-STAT = 'M' THEN
IF SEX = 'M' THEN
#STATUS := 'THIS MAN IS MARRIED'
ELSE
#STATUS := 'THIS WOMAN IS MARRIED'
END-IF
ELSE
96
0210
IF MAR-STAT = 'S' THEN
0220
IF SEX = 'M' THEN
0230
#STATUS := 'THIS MAN IS SINGLE'
0240
ELSE
0250
#STATUS:= 'THIS WOMAN IS SINGLE'
0260
END-IF
0270
ELSE
0280
#STATUS := 'STATUS IS UNKNOWN'
0290
END-IF
0300 END-IF
0310 DISPLAY NOTITLE
0320 10T PERSONNEL-ID NAME 'MARITAL STATUS' #STATUS
0330 END-READ
0340 END
97
************************************************************************
* ILUSTRACAO O USO DA DECLARACAO DECIDE FOR
************************************************************************
DEFINE DATA LOCAL
1 PERSON VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 NAME
2 MAR-STAT
2 SEX
1 #STATUS (A25)
END-DEFINE
*
READ PERSON BY NAME
DECIDE FOR FIRST CONDITION
WHEN MAR-STAT='M' AND SEX='M'
#STATUS := 'THIS MAN IS MARRIED'
WHEN MAR-STAT='M' AND SEX='F'
#STATUS := 'THIS WOMAN IS MARRIED'
WHEN MAR-STAT='S' AND SEX='M'
#STATUS := 'THIS MAN IS SINGLE'
98
0210
WHEN NONE
0220
#STATUS := 'STATUS IS UNKNOWN'
0230
END-DECIDE
0240 DISPLAY NOTITLE
0250 10T PERSONNEL-ID NAME 'MARITAL STATUS' #STATUS
0260 END-READ
0270 END
99
PERSONNEL
NAME
MARITAL STATUS
ID
--------- -------------------- ------------------------1234567
99990000
55555551
44444444
95555551
60008339
30000231
50005800
20009800
20012700
20013800
20019600
20008600
20005700
20011000
11300313
20013600
20023500
ABELLAN
ACHIESON
ADAM
ADKINSON
ADKINSON
ADKINSON
ADKINSON
ADKINSON
ADKINSON
ADKINSON
AECKERLE
AFANASSIEV
AFANASSIEV
100
STATUS IS UNKNOWN
STATUS IS UNKNOWN
STATUS IS UNKNOWN
STATUS IS UNKNOWN
STATUS IS UNKNOWN
THIS MAN IS SINGLE
THIS MAN IS SINGLE
THIS WOMAN IS MARRIED
STATUS IS UNKNOWN
STATUS IS UNKNOWN
THIS MAN IS MARRIED
THIS MAN IS MARRIED
STATUS IS UNKNOWN
THIS MAN IS SINGLE
THIS MAN IS MARRIED
THIS WOMAN IS MARRIED
THIS MAN IS SINGLE
STATUS IS UNKNOWN
Controle de loop
Processos de Repetio
O Natural fornece duas instrues para ajudar a controlar o
processamento de loop: FOR e REPEAT.
Controle de loop
FOR
O nmero exato de repeties conhecido de antemo.
Counter
no
Field
Processing loop
Exceeded?
yes
102
end
Controle de loop
REPEAT[UNTIL]
Condio lgica no incio do loop.
true
Logical
Processing loop
Condition
false
103
end
Controle de loop
REPEAT[WHILE]
Condio lgica no fim do loop.
Processing loop
Logical
true
Condition
false
104
end
Controle de loop
Processos de Repetio
Se voc no definir condio lgica alguma, a sada do loop,
com a instruo REPEAT, dever ser feita usando uma das
seguintes instrues: ESCAPE, STOP ou TERMINATE.
105
Controle de loop
Exemplos
Nesse primeiro exemplo, a instruo FOR usada para
incrementar o valor de #INDEX de 1 at 5 a fim de criar um
relatrio das razes quadradas dos nmeros 1 ao 5.
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
************************************************************
* ILUTSRA O USO DA DECLARACAO FOR NUM LOOP DE PROCESSAMENTO
************************************************************
DEFINE DATA
LOCAL
1 #INDEX (I1)
1 #ROOT (N2.7)
END-DEFINE
*
FOR #INDEX 1 TO 5
COMPUTE #ROOT = SQRT(#INDEX)
WRITE NOTITLE 'THE SQUARE ROOT OF' #INDEX 'IS ' #ROOT
END-FOR
END
106
Controle de loop
Sada:
THE
THE
THE
THE
THE
SQUARE
SQUARE
SQUARE
SQUARE
SQUARE
ROOT
ROOT
ROOT
ROOT
ROOT
OF
OF
OF
OF
OF
107
1
2
3
4
5
IS
IS
IS
IS
IS
1.0000000
1.4142135
1.7320508
2.0000000
2.2360679
Controle de loop
Exemplos
Nesse segundo exemplo, o REPEAT usado para
repetidamente permitir que os usurios entrem com um
PERSONNEL-ID por vez at no ser mais necessrio entrar
com nenhum ID (ou seja, quando o usurio deixa o em
branco).
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
************************************************************************
* ILUTSRA O USO DA DECLARACAO REPEAT
************************************************************************
DEFINE DATA
LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 NAME
1 #PERS-NR (A8)
END-DEFINE
*
108
Controle de loop
0120 REPEAT
0130 INPUT 'ENTER A PERSONNEL ID' #PERS-NR
0140
IF #PERS-NR = ' '
0150
ESCAPE BOTTOM
0160 END-IF
0170
FIND EMPLOY-VIEW WITH PERSONNEL-ID = #PERS-NR
0180
IF NO RECORDS FOUND
0190
REINPUT 'NO RECORDS FOUND'
0200
END-NOREC
0210
DISPLAY NOTITLE NAME
0220
END-FIND
0230 END-REPEAT
0240 END
Sada:
NO RECORDS FOUND
ENTER A PERSONNEL ID 23
109
Controle de loop
Exemplos
Nesse terceiro exemplo, a opo UNTIL do REPEAT usada para sair do
loop quando #X tiver o valor 6. Note que a a opo UNTIL pode ser
colocada no incio ou no final do loop.
0010 **************************************************
0020 * ILUSTRACAO DA DECLARACAO REPEAT
0030 **************************************************
0040 DEFINE DATA
0050 LOCAL
0060 1 #X (I1) INIT <0>
0070 1 #Y (I1) INIT <0>
0080 END-DEFINE
0090 *
0100 REPEAT
0110 #X := #X + 1
0120 WRITE NOTITLE '=' #X
0130 UNTIL #X=6
0140 END-REPEAT
0150 END
110
Controle de loop
Sada:
#X:
#X:
#X:
#X:
#X:
#X:
1
2
3
4
5
6
111
Controle de loop
Controle de loop
Ilustrao
ESCAPE
Descrio
Retorna ao topo do loop e inicia o processamento
da prxima iterao.
TOP
ESCAPE
BOTTOM[(r)]
[IMMEDIATE]*
ESCAPE
ROUTINE
[IMMEDIATE]
113
Controle de loop
Ilustrao
Descrio
Finaliza o programa/aplicao e retorna o controle
ao Natural.
STOP
Observao:
Se a opo IMMEDIATE for utilizada, ambos, a ltima declarao AT BREAK e
AT END OF DATA so executadas antes da sada do loop.
114
Variveis Lgicas
DEFINE DATA
LOCAL
1 #ROUTINE-DONE (L) INIT <TRUE>
END-DEFINE
.
.
.
IF #ROUTINE-DONE = TRUE
THEN ...
END-IF
END
115
Variveis Lgicas
Mscaras de edio
Para tornar o uso das variveis lgicas mais significativo, a edio de
mscara EM=FALSE/TRUE pode ser definida. Essa edio pode ser
trocada por OFF/ON, NO/YES, REJECT/ACCEPT.
0010
0020
0030
0031
0040
0060
0070
0070
0071
0080
0090
0100
0110
0120
0130
0140
DEFINE DATA
LOCAL
1 #SWITCH (L) INIT <TRUE>
1 #INDEX (I1)
END-DEFINE
FOR #INDEX 1 5
WRITE #SWITCH (EM=FALSE/TRUE) 5X 'INDEX = ' #INDEX
WRITE #SWITCH (EM=FALSE/TRUE) 5X 'INDEX = ' #INDEX
SKIP 1
IF #SWITCH = TRUE
MOVE FALSE TO #SWITCH
ELSE
MOVE TRUE TO #SWITCH
END-IF
END-FOR
END
116
Controle de loop
Sada:
Page
TRUE
TRUE
INDEX =
INDEX =
1
1
FALSE
FALSE
INDEX =
INDEX =
2
2
TRUE
TRUE
INDEX =
INDEX =
3
3
FALSE
FALSE
INDEX =
INDEX =
4
4
TRUE
TRUE
INDEX =
INDEX =
5
5
117
Programas
Subrotinas
Subprogramas
Copycode
118
Programas
Programas
120
Programas
Controlando pilha
Usando os objetos programveis voc pode carregar comandos
e/ou dados na pilha;
Voc pode carregar esses itens no topo ou na base da pilha;
Voc pode colocar os dados na pilha no modo Form ou no modo
Delimiter;
Voc pode ver o que est no topo da pilha atravs da varivel de
sistema *DATA. Essa varivel pode assumir os seguintes valores:
Valor
0
Descrio
-1
Programas
Passando dados
Quando voc estiver passando dados de um programa para
outro, lembre-se dos seguintes pontos em relao GDA e a
pilha:
Pilha (Stack)
A pilha passa dados via lista de argumentos;
Os dados da pilha so recebidos no programa chamador dia
declarao INPUT;
Informaes limitadas podem ser passadas em uma nica entrada
da.
122
Programas
123
Programas
Exemplo
DEFINE DATA
DEFINE DATA
GDA
LOCAL
LOCAL
1 #PARM1 (A10)
1 #ARG1 (A10)
1 #PARM2 (A10)
1 #ARG2 (A10)
END-DEFINE
END-DEFINE
NATURAL
Stack
END
END
124
Programas
Carregando a pilha
Voc pode carregar a pilha usando o comando EXECUTE;
Com as declaraes FETH e FETCH RETURN;
Com a declarao STACK
Essa declarao, por default coloca os dados na base da pilha no
modo delimiter.
Limpando a Pilha
Voc pode limpar a pilha atravs da declarao RELEASE STACK;
Com o comando de terminal %%;
Pressionando a tecla CLEAR.
O comando de terminal %P apaga a primeira entrada e o comando
%S l a primeira entrada sem apag-la.
125
Programas
** SATCKING PROGRAM
...
0080
SMITH
STACK DATA SMITH
...
0190
0200
BRYAN,30
SMITH
0360
...
100783,28
BRYAN,30
SMITH
126
Programas
** INPUT PROGRAM
0020
** PERSON
100783,28
BRYAN,30
...
0120
0130
...
0200
SMITH
STACK AFTER LINE 0130
INPUT #LASTNAME
SMITH
127
Subrotinas
Subrotinas
Subrotinas Externas
So codificadas como um objeto separado;
Podem ser acessadas por mltiplos objetos.
O que constitui uma subrotina
PERFORM subroutine-name
...
DEFINE SUBROUTINE subroutine-name
(processing statements)
END-SUBROUTINE
129
Subrotinas
Subrotinas Externas
Tudo que voc codifica entre as declaraes DEFINE
SUBROUTINE e END-SUBROUTINE considerado parte
da subrotina. Qualquer processamento de loop iniciado
dentro de uma subrotina deve ser fechado antes da
declarao END-DEFINE.
A declarao PERFORM usada para chamar tanto a
subrotina interna quanto a externa. Ela busca o nome da
subrotina definido na declarao DEFINE SUBROUTINE
e no o nome do objeto.
130
Subrotinas
Subrotina Interna
PGMA
Subrotina Externa
PGM1
DEFINE DATA
DEFINE DATA...
END-DEFINE
END-DEFINE
READ...
PERFORM XYZ
PERFORM SUBRT1
...
...
END-READ
END-SUBROUTINE
END
SUBRT1
DEFINE DATA
END-DEFINE
END
END-SUBROUTINE
END
131
Subrotinas
Subrotinas
133
Subrotinas
134
Subprogramas
135
Subprogramas
PGM1
SU PGM1
DEFINE DATA
DEFINE DATA
END-DEFINE
PDA1
...
CALLNAT SBPGM1
argumentos
argumentos
...
END
END
136
Subprogramas
Lembre-se!
Os subprogramas fornecem um meio mais eficiente
de compartilhar dados que a pilha, uma vez que os
dados so meramente referenciados e no passados;
Os subprogramas passam apenas referncias para os
dados definidos em suas GDA ou PDA;
Por default, um parmetro passado por referncia
para um subprograma/subrotina, ou seja, transferido
pelo seu endereo. Um campo definido como
parmetro numa declarao CALLNAT/PERFORM
deve ter o mesmo formato/tamanho que o campo
correspondente;
137
Subprogramas
Lembre-se!
Se parmetros so passados por valor (by value), o
valor atual do parmetro que passado e no o
endereo, logo o campo do subprograma no precisa
ter o mesmo formato e tamanho que o parmetro da
declarao CALLNAT/PERFORM;
Se os valores dos parmetros que foram modificados
no subprograma devem ser retornados ao programa
chamador voc tem que definir esses campos como BY
VALUE RESULT.
138
Copycode
DEFINE DATA
PF2
PF3
END-DEFINE
PF12
INCLUDE COPYC1
139
END
Copycode
Lembre-se!
Voc no pode ter a declarao END em seu
copycode;
Copycode salvo, nunca catalogado;
O copycode no pode ser checado;
O copycode no pode conter um trecho de outra
declarao (s pode conter uma ou mais declaraes
completas);
O teste e a depurao pode ser difcil;
Se voc modifica um copycode, voc deve recompilar
todos os objetos que o utiliza.
140
Copycode
Lembre-se!
O copycode aumenta o tamanho do objeto compilado
que o utiliza. O tamanho do cdigo fonte no sofre
aumento;
Valores podem ser inseridos dinamicamente dentro
do copycode usando-se a notao &n&.
141
Calculando valores
Atribuindo valores
Combinando e separando valores
Trabalhando com Strings
Trabalhando com Data e Time
Processamento de arrays
142
Calculando Valores
Operadores aritmticos
Cada operador deve ser precedido por um caracter branco para no ser
confundido com o nome da varivel. Os seguintes smbolos so usados
como operadores:
Operador
Smbolo
Add
+
-
Subtract
*
/
()
**
Multiply
Divide
Parnteses
Exponencial
143
Calculando Valores
Ordem do processamento
Os clculos aritmticos possuem vrios operadores para serem
processados dentro de uma nica declarao. Para assegurar a exatido
desses clculos, a seguinte ordem deve ser seguida:
1. Parnteses;
2. Exponencial;
3. Multiplicao/Diviso (da esquerda para direita);
4 Adio/Subtrao (da esquerda para direita).
144
Calculando Valores
Descrio
Operador
-operador2
DIVIDE #A INTO #B
-operador3
O resultado colocado:
-operador1
/
+
Notas:
- Use os parnteses para agrupar operaes complexas;
- A palavra chave COMPUTE opcional em report mode;
145
Calculando Valores
Operador
Descrio
ADD[ROUNDED] oper1TO oper2[GIVING oper3]
O resultado colocado:
-operador2
ADD 7 TO #FIELD1
-operador3
O resultado colocado:
-operador2
-operador3
MULTIPLY #A BY #B
-operador3
146
Atribuio de valores
RESET
Essa instruo devolve varivel o valor nulo ou seu valor
original. Os seguintes elementos podem ser atualizados com
o RESET:
Campos elementares de qualquer formato Natural vlido;
Arrays;
Campos de grupo;
Variveis do sistema;
Toda user view ou campos do banco dentro dessas views.
147
Atribuio de valores
Exemplo
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
**************************************************************
* ILUSTRA O USO DA DECLARACAO RESET INITIAL
**************************************************************
DEFINE DATA
LOCAL
1 #A (P4.2)INIT <119.2>
1 #B (P4.2)INIT <17>
1 #C (P4.2)
1 #D (P4.2)
END-DEFINE
DIVIDE #B INTO #A GIVING #C REMAINDER #D
WRITE // 'DEPOIS DE TER DIVIDIDO #B DE #A: ' 40T #A #B #C #D
RESET INITIAL #A #B #C #D
WRITE // 'RETORNANDO AOS VALORES INICIAIS: ' 40T #A #B #C #D
RESET #A #B #C #D
WRITE // 'LIMPANDO OS VALORESDAS VARIAVEIS: ' 40T #A #B #C #D
END
148
Atribuio de valores
Sada:
Page
03-01-16
15:50:38
119.20
17.00
7.01
0.03
119.20
17.00
0.00
0.00
0.00
0.00
0.00
0.00
149
Atribuio de valores
150
Atribuio de valores
Exemplo
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
************************************************************************
* ILUSTRA O USO DA DECLARACAO RESET
************************************************************************
DEFINE DATA
LOCAL
1 #A (A30) INIT <'BUILDING NATURAL APPLICATIONS'>
1 #B (P3.2)
1 #C (I4)
1 #ARRAY (A4/12)
1 #GRP
2 #GRP-F-1 (A10)
2 #GRP-F-2 (N5)
1 PERSON VIEW OF EMPLOYEES
2 NAME
2 BIRTH
2 CITY
END-DEFINE
RESET #A #B #C #ARRAY(*) #GRP PERSON
END
151
Atribuio de valores
Atribuio de valores
Exemplo:
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
*******************************************************
* ILUSTRA O USO DA DECLARACAO ASSIGN
*******************************************************
DEFINE DATA LOCAL
1 CARS VIEW OF VEHICLES
2 MAKE
2 MODEL
2 COLOR
2 YEAR
1 #MAKE(A20)
END-DEFINE
*
ASSIGN #MAKE = 'FORD' /* MOVE FORD TO #MAKE seria a outra alternativa
FIND CARS WITH MAKE=#MAKE
DISPLAY NOTITLE YEAR MAKE MODEL
END-FIND
END
153
Atribuio de valores
Sada:
YEAR
MAKE
MODEL
----- -------------------- -------------------1982
1980
1980
1980
1980
1980
1980
1985
1983
1978
1984
1986
1984
1985
1986
...
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
SIERRA
CAPRI
ESCORT
CAPRI
CAPRI
FIESTA
ESCORT
ESCORT LASER
TRANSIT
GRANADA
SIERRA 2.0
SCORPIO 2.0 I GL
FIESTA XR2
SIERRA L TURNIER
ESCORT XR3I
154
Atribuio de valores
Descrio
Pode ser usado quando o valor a ser recebido uma varivel
numrica. O valor arredondado antes de ser movido.
MOVE EDITED
MOVE BY NAME
Atribuio de valores
Descrio
Copia o valor para dentro de uma varivel at que ela esteja
totalmente preenchida. A opo UNTIL limita o nmero de posies.
Copia o contedo de um campo de uma estrutura para outra
MOVE BY POSITION
MOVE SUBSTRING
MOVE LEFT/RIGHT
JUSTIFIED
Atribuio de valores
***************************************************************
* ILUSTRA O USO DA DECLARACAO ASSIGN
***************************************************************
DEFINE DATA LOCAL
1 #DATEA-RESULT
(D)
1 #NUMERIC-RESULT
(N6)
1 #ALPHA-DATEA
(A8) INIT <'96/01/20'>
END-DEFINE
*
MOVE EDITED #ALPHA-DATE TO #NUMERIC-RESULT (EM=99/99/99)
WRITE '=' #NUMERIC-RESULT '=' #ALPHA-DATE
**
MOVE EDITED #ALPHA-DATE TO #DATE-RESULT
(EM=YY/MM/DD)
WRITE '=' #DATE-RESULT '=' #ALPHA-DATE
**
END
157
Atribuio de valores
Sada:
Page
03-01-16
158
16:06:34
COMPRESS
A instruo COMPRESS combina os valores de dois ou mais
campos em um nico campo alfanumrico.
Se o campo que ir receber o contedo dos valores
comprimidos for maior que o contedo combinado o restante
preenchido com brancos.
Se o campo que ir receber o contedo for menor, o valor
ser truncado. Zeros esquerda em campos numricos e
brancos entre campos alfanumricos so suprimidos quando
combinados. Se os zeros esquerda forem necessrios, o
campo numrico deve ser redefinido como alfanumrico.
159
Opo
SPACE
WITH
DELIMITER
160
Opo
FULL
NUMERIC
Descrio
Os valores dos campos fontes so combinados para incluir todos
os brancos e zeros..
Pontos e sinais no campo fonte sero transferidos para o campo
alvo.
161
Exemplo:
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
**************************************************************
* ILUSTRA O USO DA DECLARACAO COMPRESS
**************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
2 FIRST-NAME
2 MIDDLE-I
2 NAME
1 #FULL-NAME (A20)
END-DEFINE
**
READ (5) VIEWEMP BY NAME STARTING FROM 'JONES'
COMPRESS FIRST-NAME MIDDLE-I NAME INTO #FULL-NAME
DISPLAY NOTITLE FIRST-NAME MIDDLE-I NAME #FULL-NAME
SKIP 1
END-READ
END
162
Sada:
FIRST-NAME
MIDDLE-I
NAME
#FULL-NAME
-------------------- -------- -------------------- -------------------VIRGINIA
MARSHA
JONES
VIRGINIA J JONES
JONES
MARSHA JONES
ROBERT
JONES
ROBERT B JONES
LILLY
JONES
LILLY P JONES
EDWARD
JONES
EDWARD C JONES
163
SEPARATE
A instruo SEPARATE divide o contedo de um campo
alfanumrico em dois ou mais campos ou em mltiplas
ocorrncias de um array.
Se voc no especificar um delimitador, qualquer caracter
diferente de letra ou nmero ser tratado como tal. A
separao ocorre sempre que um delimitador encontrado.
164
Opo
WITH INPUT
DELIMITER
WITH
DELIMITER
LEFT
JUSTIFIED
GIVING
NUMBER
Opo
IGNORE
REMAINDER
RETAINED
Descrio
Evita mensagens de erro quando voc define um nmero de
campos alvo menor que o esperado.
DELIMITERS
SUBSTRING
166
Exemplo:
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
************************************************************
* ILUSTRA O USO DA DECLARACAO SEPARATE
************************************************************
DEFINE DATA LOCAL
1 #PRODUCT-NAME
(A40) INIT <'ENTIRE APPC SERVER'>
1 #PRODUCT-CATEGORY (A10) /* EX.: NATURAL, ADABAS, ENTIRE
END-DEFINE
*
SEPARATE #PRODUCT-NAME INTO #PRODUCT-CATEGORY IGNORE
WRITE NOTITLE
// 4X '=' #PRODUCT-NAME / '=' #PRODUCT-CATEGORY
END
167
Sada:
#PRODUCT-NAME: ENTIRE APPC SERVER
#PRODUCT-CATEGORY: ENTIRE
168
EXAMINE
A instruo EXAMINE varre o contedo de um campo
alfanumrico ou de um array a procura de um string. H duas
formas para essa instruo:
ABSOLUTE - Qualquer ocorrncia do string procurada.
WITH DELIMITERS - As ocorrncias devem ser delimitadas
por brancos ou por um caracter especial.
Opo DELETE/REPLACE
Use essas opes para excluir ou substituir cada valor do
operando1 que idntico ao operando2.
169
Clausula
EXAMINE
PATTERN
EXAMINE
SUBSTRING
EXAMINE
TRANSLATE
170
Clausula GIVING:
Descrio
Clausula
GIVING
NUMBER
GIVING
POSITION
GIVING
LEFT
GIVING
INDEX
171
Exemplo:
EXAMINE #TELE FOR PATTERN () GIVING NUMBER #NUMBER
EXAMINE #NAME FOR GIVING NUMBER #NUM GIVING POSITION #POS
EXAMINE FULL #NAME FOR GIVING NUMBER #NUM GIVING POSITION #POS
EXAMINE #ARRAY(*) FOR X GIVING INDEX #INDEX
172
Resultados
Colocado no campo Data ou hora
173
Exemplo:
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
***************************************************************
* ILUSTRA O USO DA DE CAMPOS DATA
***************************************************************
DEFINE DATA LOCAL
1 EMPL VIEW OF EMPLOYEES
2 NAME
2 PERSONNEL-ID
2 LEAVE-START (1)
2 REDEFINE LEAVE-START
3 #LEAVE-START-A (A6)
2 LEAVE-END (1)
2 REDEFINE LEAVE-END
3 #LEAVE-END-A(A6)
1 #LEAVE-DUE (P6)
1 #START-DATE (D)
1 #END-DATE
(D)
END-DEFINE
*
174
Exemplo:
0190 READ (10) EMPL BY NAME FROM 'A'
0200
MOVE EDITED #LEAVE-START-A TO #START-DATE (EM=YYMMDD)
0210
MOVE EDITED #LEAVE-END-A TO #END-DATE (EM=YYMMDD)
0220
COMPUTE #LEAVE-DUE = #END-DATE - #START-DATE +1
0230
DISPLAY NAME PERSONNEL-ID LEAVE-START(1) LEAVE-END(1)
0240
'LEAVE/DUE' #LEAVE-DUE
0250 END-READ
0260 END
175
Sada:
NAME
PERSONNEL
LEAVE
LEAVE
LEAVE
ID
START
END
DUE
-------------------- --------- ---------- ---------- ------ABELLAN
ACHIESON
ADAM
ADKINSON
ADKINSON
ADKINSON
ADKINSON
ADKINSON
ADKINSON
ADKINSON
60008339
30000231
50005800
20009800
20012700
20013800
20019600
20008600
20005700
20011000
176
1998/11/04
1998/12/27
1999/08/01
1998/02/22
1998/01/02
1998/01/12
1998/01/02
1998/01/12
1998/01/12
1998/01/02
1998/11/09
1998/12/31
1999/08/31
1998/02/23
1998/01/03
1998/01/12
1998/01/03
1998/01/12
1998/01/12
1998/01/03
1
1
1
1
1
1
1
1
1
1
Processamento de Array
177
Processamento de Array
Array de duas-dimenses
Array de uma-dimenso
#FLD(A15/5,4)
#FLD (A15/5)
1
4
5
5
Array de trs-dimenses
#FLD(A15/4,5,3)
1
178
Processamento de Array
ndices de array:
Descrio
ndice
#ARRAY(1)
#ARRAY(7:12)
#ARRAY(5,3:7)
Processamento de Array
ndices de array:
Descrio
ndice
180
Processamento de Array
Lembre-se!
Quando expresses aritmticas so usadas como
ndices, os operadores + e - devem ser precedidos e
seguidos por um caracter em branco;
Se um valor constante possui 4 dgitos, coloque-o
entre parnteses, pois o Natural interpreta esse nmero
como um nmero de linha. Portanto um array que
possui ocorrncias com 4 dgitos devem ser precedidos
por uma barra /. Exemplo:
#ARRAY(/1000) vs. #ARRAY(1000)
181
Mltiplos e Peridicos
Mltiplos e Peridicos
Funo
Varivel
C*fieldname
186
Mltiplos e Peridicos
Lembre-se!
A varivel C* contm o nmero e ocorrncias que
existem no banco, no o nmero de ocorrncias que
voc escolhe para retornar ao programa.
Para definir a varivel C* no editor da rea de dados,
verifique o comando de edio apropriado. Exemplo
.*.
187
Mltiplos e Peridicos
1. Exemplo
As ocorrncias do Campo de valor mltiplo PROF. Podem
ser referenciadas da seguinte forma:
MU:PROF
DISPLAY NAME PROF (2:4)
MOVE PROF(#I) TO #HLD
DISPLAY PROF (#I:#J)
188
Mltiplos e Peridicos
2. Exemplo
As ocorrncias do Peridico EDUC composta por um grupo
de trs campos, podem ser referenciadas da seguinte forma:
DISPLAY EDUC (1:3)
PE:EDUC
189
Escola
Srie
Ano
Mltiplos e Peridicos
3. Exemplo
Esse exemplo ilustra um campo de valor mltiplo chamado
CURSOS contido em um peridico. As ocorrncias de um
campo mltiplo definido dentro de um peridico podem ser
referenciadas da seguinte forma:
PE:EDUC
Escola Srie
190
Ano
Cursos
Mltiplos e Peridicos
Exemplo:
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
***************************************************************
* ILUSTRA O USO DE CAMPOS MLTIPLOS
***************************************************************
DEFINE DATA LOCAL
1 EMP VIEW OF EMPLOYEES
2 C*INCOME
2 SALARY (5)
2 BONUS (5,5)
2 PERSONNEL-ID
2 NAME
1 #TOTAL-INCOME (P12)
1 #NO-OF-SALARIES (N2)
END-DEFINE
READ (15) EMP BY NAME STARTING FROM G
#NO-OF-SALARIES := C*INCOME
ADD SALARY(*) TO #TOTAL-INCOME
NEWPAGE LESS THAN #NO-OF-SALARIES
DISPLAY NOTITLE (SF=3)
8T EMPLOYE/ID PERSONNEL-ID EMPLOYEE/NAME NAME
191
Mltiplos e Peridicos
Exemplo:
0200
SALARY/HISTORY SALARY(1:#NO-OF-SALARIES) (EM=ZZZ,ZZZ,ZZ9 HC=R)
0210
TOTAL/INCOME #TOTAL-INCOME (EM=ZZZ,ZZZ,ZZ9 HC=R)
0220
SKIP 1
0230
RESET #TOTAL-INCOME
0240 END-READ
0250 END
192
MDULO IV - Mapas
193
194
Propsito
O usurio deveria sempre estar seguro do controle da
Controle do usurio
196
Objetivo
Propsito
O usurio deveria sempre estar seguro do controle da
Controle do usurio
Consistncia
Atratividade
197
Objetivo
Propsito
Os usurios deveriam sempre receber imediatamente
mensagens de retorno de suas aes. Eles no
deveriam e questionar sobre o que fizeram de errado.
Feedback
Recall
Esquecimentos
198
Programao Interativa
Os mapas Natural permitem aos usurios comunicar-se
com os programas. Um programa iterativo controla o
mapa para que ele possa enviar e obter informaes do
usurio. A maneira do Natural fornecer essa iterao se
d pelo uso da declarao INPUT.
199
Especificaes do Mapa
O tamanho mximo da pgina (n. de linhas) 250, e o tamanho
da linha (n. de colunas) deve compreender 5-249;
Todo campo do mapa deve ter nome e esses nomes devem
corresponder aos nomes de campos usados no programa chamador;
Os campos exibem atributos que podem ser sobrescritos usando
as variveis de controle;
O nvel do campo e o nvel do mapa podem ser incorporados
dentro do mapa;
As regras de processamento podem ser definidas em seu mapa,
embora a maioria prefiram definir nos programas.
200
Tipos de Mapa
Interno
Os mapas internos so definidos dentro do programa
usando-se o editor de programa e so utilizados
unicamente por esse programa em particular.
Externo
Como a rea de dados externo, esses programas podem
ser usados por diferentes programas. Esses objetos so
definidos for a do programa usando-se o editor de mapa.
201
Tipos de Mapa
Interno
Externo
Mapa
Programa
Programa
Mapa
Mapa
Mapa
Mapa
Mapa
202
DATA:(XXXXXXXXXX
HORA:(XXXXXXXXXX
BIBLIOTECA:(XXXXXXXX
MAPA:(XXXXXXXX
SISTEMA DE WORKSHOP
MENU PRINCIPAL
______________________________________________________________________________
A
B
C
D
E
OPCAO: )X
ID DO FUNCIONARIO: )XXXXXXXX
(XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
______________________________________________________________________________
PF3 - ENCERRA
203
Mapa Interno
Para criar um mapa interno voc vai utilizar a instruo
INPUT. Todos os campos definidos na declarao INPUT
so so campos de entrada, por default.
Se voc quiser mudar o tipo do campo para output ou
modifiable, use as definies de atributos (AD) para aquele
campo. Essas definies permitem que voc defina a funo
e aparncia dos campos no mapa.
204
Atributo
Variaes Disponveis
B = Blinking (flash on and off)
Representao
do
Campo
Alinhamento
= Intensified (Negrito)
N = No display
D = Default
L = left-justified
do
Campo
Tipo
de
Campo
Atributo
Variaes Disponveis
Tamanho
das letras
no Campo
Caracteres
de Preenchimento
206
208
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200
0210
0220
0230
0240
0250
***************************************************************
* ILUSTRA O POSICIONAMENTO DO CURSOR NO MAP
****************************************************************
DEFINE DATA
LOCAL
1 #MARCA-INICIAL (A20)
1 #MARCA-FINAL
(A20)
1 CARS VIEW OF VEHICLES
2 MAKE
2 MODEL
2 YEAR
END-DEFINE
*
INPUT MARK *#MARCA-FINAL /////
7T 'ENTRE COM A MARCA INICIAL E FINAL PARA A LEITURA DO ARQUIVO'
// 17T 'MARCA INICIAL:' #MARCA-INICIAL (AD=AIT'_')
// 19T 'MARCA FINAL :' #MARCA-FINAL
(AD=AIT'_')
*
READ CARS BY MAKE STARTING FROM #MARCA-INICIAL ENDING AT #MARCA-FINAL
DISPLAY MAKE MODEL YEAR
END-READ
*
WRITE / 10T 'O RELATORIO ESTA COMPLETO'
*
END
209
Cursor
210
MAKE
MODEL
YEAR
-------------------- -------------------- ----ALFA ROMEO
ALFA ROMEO
ALFA ROMEO
AMERICAN MOTOR
AMERICAN MOTOR
AMERICAN MOTOR
AUDI
AUDI
AUDI
AUDI
AUDI
GIULIETTA 2.0
SPRINT GRAND PRIX
QUADRIFOGLIO
HORNET
AMBASSADOR
HORNET
QUATRO
QUATRO TURBO
QUATRO TURBO
100 CD
80 S
DATSUN
DATSUN
DATSUN
300ZX
CHERRY
SUNNY
O RELATORIO ESTA COMPLETO
211
1985
1984
1984
1977
1983
1977
1983
1983
1986
1982
1980
1986
1983
1981
Mapas Externos
Os mapas externos so criados no editor de mapa e so
invocados no programa atravs da declarao INPUT
USING MAP.
Iremos mostrar 2 tipos de mapas. Um simples e o outro
usa vrias opes em sua declarao.
212
Programa
...
Mapa Externo
~~~~
menumap
/*Exemplo 1
INPUT USING MAP MENUMAP
~~~~~ ~ ~~~~
...
~~~~~~
~~~~
~~~~~~
/*Exemplo 2
INPUT WITH TEXT
. ENTRE COM SUA OPO
menumap
~~~~
~~~~~ ~ ~~~~
~~~~~~
~~~~
.
ENTRE COM SUA OPO
END
213
Para cada mapa externo que voc cria, voc pode mudar
vrias definies que alteram sua aparncia e seu
comportamento. Por exemplo, voc pode controlar o
tamanho do mapa, se as teclas de funo iro aparecer ou
no, etc.
Quando voc inicia um novo mapa, estas definies esto
com seus valores padres, mas, voc pode sobrescrev-los.
214
216
217
218
Mtodo I
Meu Mapa
#novo-campo
(nome default: #001)
Especificar:
Formato;
Tamanho;
Localizao no mapa e
Nome
219
Mtodo II
Definio de Dados existente
#campo-ja-existente (a40)
#outro-campo (a1)
220
Meu Mapa
221
Layouts
222
Layouts
Tipos de Layout
Esttico: Serve apenas como um ponto inicial para a criao
de um novo mapa. Voc usa o mapa de layout como um
modelo para a definio de novos mapas. As mudanas
realizadas no layout no tm efeito sobre o novo mapa.
Dinmico: Ele permite que voc tenha um modelo
consistente e modifique facilmente o layout de tal forma que
as alteraes efetuadas no layout sejam repassadas para o
outros mapas da sua aplicao.
223
Layouts
Formulrios
Formulrios
Chamando um formulrios
Uma vez criado, para chamar um formulrio a partir de
outro objeto, basta usar a declarao WRITE USING
FORM seguido do nome do formulrio.
Mltiplos formulrios sero escritos para a mesma pgina
ou tela.
Voc pode usar regras de processamento no formulrio mas,
Lembre-se!
A regra no pode usar a declarao REINPUT ;
As regras de PF nunca so processadas;
Todas as regras so processadas depois que o formulrio
escrito e antes do controle ser retornado ao objeto chamador.
226
Formulrios
END-DEFINE
END
MDULO IV - Mapas
228
Caractersticas do campo
Ao criar um mapa, voc pode definir todas as caractersticas
que voc deseja para um campo. Muitas caractersticas esto
associada a definio de algum parmetro. Segue na tabela
abaixo alguns desses parmetros.
Caracterstica
Parmetro
Nome do campo
s/p
Propsito
Nome do campo. Qualificador de alto nvel
includo para campos do banco.
Tamanho e
s/p
Formato
229
Caracterstica
Parmetro
Definio de
AD
Atributos
Propsito
Exibe a funo de seu campo( ex.:
input/output/modifiable; required/optional)
e como o campo ser exibido (ex.:
intensificado, com caracter de
preenchimento.
CV
Controle
Help
HE
230
Caracterstica
Parmetro
Propsito
HE
Help
DY
s/p
de processamento
231
Caracterstica
Parmetro
Modo de
Definio
s/p
Propsito
Indica como o campo foi definido:
DATA
= selecionados a partir da
DEFINE DATA;
SYS
= varivel de sistema;
232
USER
VIEW
Tamanho do
campo de exibio
FL
EM
NL
Mscara de
edio
Definio de cor
CD
Impresso de
ZP
zeros
233
Modo de
Impresso
234
SG
PM
Variveis de Controle
235
Variveis de Controle
Variveis de Controle
Categoria de delimitadores
Representao do campo (Parmetro AD)
B
Blinking
Cursive/Italic
Default intensity
Intensified
Non-display
Underlined
Reverse video
Dynamic atributtes
Temporarily protected
237
Variveis de Controle
Categoria de delimitadores
Exibio de cor (Parmetro CD)
BL
Blue
GR
Green
NE
Neutral
PI
Pink
RE
Red
TU
Turquoise
YE
Yellow
238
Variveis de Controle
Ao
No objeto que chama o mapa, defina a varivel de controle,
por exemplo:
#CNTL (C)
Antes de chamar o mapa, mova ou defina atributos varivel.
MOVE (AD=B CD=YE) TO #CNTL
239
Variveis de Controle
Passo
Ao
Use o parmetro control variable para ligar a varivel de
controle em nvel de campo ou mapa.
240
Variveis de Controle
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200
************************************************************************
* ILUSTRACAO DO USO DA VARIAVEL DE CONTROLE
************************************************************************
DEFINE DATA
GLOBAL USING DIAGDA
LOCAL
1 #LANME
(A20)
1 #OPTION (A1)
1 #CTLVAR1 (C)
/* NIVEL DE MAPA
1 #CTLVAR2 (C)
/* NIVEL DE CAMPO
1 #MESSAGE (A60)
END-DEFINE
REPEAT
INPUT
////'POR FAVOR ENTRE COM O ULTIMO NOME: ==> ' #LNAME (AD=AILT'_')
/'OU ENTRE COM A PALAVRA "QUIT" PARA SAIR' (CD=RE)
IF #LNAME = ' '
REINPUT 'OPCAO INVALIDA! ENTRE COM O NOME OU "QUIT"' MARK *#LNAME
END-IF
IF #LNAME='QUIT'
241
Variveis de Controle
0210
0220
0230
0240
0250
0260
0270
0280
0290
0300
0310
0320
0330
0340
0350
0360
0370
0380
0390
0400
242
Variveis de Controle
243
MDULO IV - Mapas
Instruo REINPUT
Regras de processamento
Regras de processamento internas
Reutilizao das regras internas
Resumo
244
INSTRUO REINPUT
A CLAUSULA MARK
Voc pode usar a clausula MARK com a instruo REINPUT
para posicionar o cursor no campo em que o erro ocorreu.
Alm disso, voc tem a opo de exibir as mensagens de
erro com cores diferentes ou em negrito.
245
INSTRUO REINPUT
Sada:
PLEASE ENTER A LAST NAME OR QUIT
PLEASE ENTER A LAST NAME_______________________
OR ENTER THE WORD QUIT
246
INSTRUO REINPUT
Lembre-se!
Nenhuma instruo WRITE ou DISPLAY
pode ser executada entre as declaraes
INPUT e REINPUT.
A instruo REINPUT pode ser usada em
mapas internos e externos, porm seu uso
mais eficiente quando codificada em mapas
externos.
Em virtude da instruo REINPUT retornar
ao ltimo INPUT, todas as regras de
processamento no mapa so re-executadas.
247
Regras de Processamento
248
Regras de Processamento
Exemplo
0010 IF #END = FALSE
0020
IF & = 'D' OR = 'U' OR = 'Q'
0030
IGNORE
0040
ELSE
0050
REINPUT 'CORRECT VALUE ARE "D" = DELETE, "U" = UPDATE, "Q" = QUIT'
0060
(AD=I) MARK *&
0070
END-IF
0080 END-IF
249
Regras de Processamento
Vantagens
possvel testar o mapa e toda lgica associada a ele
antes da criao do objeto chamador;
Ajuda a executar sua aplicao de forma mais eficiente;
As regras de processamento podem ser compartilhada
entre outros programas e aplicaes. Isso pode ser feito
com o auxlio do Predict, que fornece 3 tipos de regras:
Inline rules (regras internas)
Free rules (regras livres)
Automatic rules (regras automticas)
250
Regras de Processamento
Regras Inline
Elas so definidas diretamente no mapa para serem usadas
somente por ele. Esse tipo de regra no precisa estar
documentada no Predict e outros mapas na aplicao no
precisam acess-la.
Regras Free
So criadas para serem usadas em vrios mapas. Como
forma de centralizar as informaes so documentadas no
Predict. Para ser usada por mais de um mapa deve ser
criada de forma geral e em virtude desse compartilhamento
no deve ser modificada antes que seus efeitos sejam
avaliados nos outros mapas.
251
Regras de Processamento
Regras Automticas
So definidas para campos do banco dentro da DDM pelo
DBA ou pelo administrador do banco. Elas so
automaticamente usadas sempre que campos do banco so
usados no mapa. Elas so criadas no Predict e no podem
ser alteradas em nvel de mapa.
252
Regras de Processamento
Nveis de Processamento
Um nico campo pode ter at 100 regras. A ordem do
processamento feita atribuindo nveis para cada regra. As
regras so processadas na ordem ascendente do nvel 0 ao
99 e de acordo com a posio do campo no mapa - da
esquerda para a direita e de cima para baixo. As regras
associadas com as *PF-KEY so processadas primeiro. Elas
agem como se fossem o primeiro campo do mapa.
253
Regras de Processamento
Rank
Regra de processamento
Regra de Finalizao
1-4
Regras Automticas
5-24
Checagem de formato
25-44
45-64
Regras de Processamento
Regra de processamento
Rank
65-84
Acesso ao banco
85-99
Propsitos especiais
255
Regras de Processamento
256
Regras de Processamento
Exemplo
0010 IF #END = FALSE
0020
IF & = 'D' OR = 'U' OR = 'Q'
0030
IGNORE
0040
ELSE
0050
REINPUT
0060
'CORRECT VALUES ARE "D" = DELETE, "U" = UPDATE, "Q" = QUIT'
0070
(AD=I) MARK *&
0080
END-IF
0090 END-IF
257
Regras de Processamento
Lembre-se!
A declarao END no permitida dentro
das regras de processamento;
Referncias a nmeros de linha no so
permitidas dentro das regras de
processamento;
Voc pode checar, testar ou salvar uma
regra de processamento.
258
Regras de Processamento
Lembre-se!
Evite a execuo de objetos externos a partir de
regras de processamento (ex.: uso do PERFORM
ou CALLNAT) pois h uma enorme possibilidade
do controle ser passado para fora do mapa antes
da validao dos campos de entrada;
Regras de processamento podem conter a
declarao DEFINE DATA, pois voc pode
precisar usar uma varivel que no est definida
no mapa ou uma view e seus campos.
259
260
(PA 1-3)
(PF 1-24)
ENTER key
(ENTR)
CLEAR key
(CLR)
Ligth pen
(PEN)
261
262
Variveis de sistema
263
SET KEY
Descrio
Keyword
OFF
ON
ALL
PFn=HELP
PFn=OFF
265
SET KEY
Descrio
Keyword
PFn
266
267
Sistema de Gerenciamento de
Banco de Dados (DBMS)
Manufacturing
Sistema
DBMS
Operacional
Human Resources
Accounting
DADOS
Sales/Marketing
268
269
Mtodos de Acesso
O Natural suporta dois mtodos: Seqencial e Randmico. A
declarao que voc escolher para fazer o acesso ir
determinar o tipo do mtodo.
Seqencial
Seu uso adequado para acessar um nmero grande
de registros.
Randmico
Seu uso adequado para acessar um nmero restrito
de registros ou para registros que satisfazem algum
critrio de pesquisa.
271
REGISTRO RETORNADO
READ
FIND
SOLICITAO
SOLICITAO
Employees
Vehicles
Etc.
SOLICITAO
GET
REGISTRO
CONTADOR
RETORNADO
RETORNADO
272
SOLICITAO
HISTOGRAM
Processamento Seqencial
Instruo READ
o mtodo de acesso mais eficiente para processar todo o
arquivo. Os arquivos podem ser recuperados do banco:
Na ordem em que foram fisicamente armazenados
(READ PHYSICAL);
Atravs do nmero seqencial interno (READ BY ISN);
Na ordem dos valores de um campo chave (READ
LOGICAL).
273
Processamento Seqencial
READ PHYSICAL
Essa instruo gera um loop de processamento para
acessar os dados no qual os registros so retornados na
ordem em que forma armazenados fisicamente. A leitura
comea com o incio do dados e continua at que o ltimo
registro seja lido. Podemos interromper esse
processamento estabelecendo um limite, por exemplo,
definindo um nmero de registros a serem lidos.
O READ PHYSICAL til quando a ordem dos registros
retornados no importante ou quando o critrio de
seleo no necessrio.
274
Processamento Seqencial
Lembre-se!
Use o READ PHYSICAL para ler um nmero
grande de registros por ordem fsica de
armazenamento;
Cuidado ao usar o READ PHYSICAL para
obter e atualizar todos os registros num
arquivo. Em alguns DBMSs voc poderia
atualizar inadvertidamente um registro duas
vezes se o registro atualizado no for
colocado de volta na mesma localizao fsica
aps a modificao.
275
Processamento Seqencial
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200
**************************************************************
* ILUSTRA O READ PHYSICAL
**************************************************************
DEFINE DATA LOCAL
1 CARS VIEW OF VEHICLES
2 MAKE
2 MODEL
2 COLOR
2 YEAR
1 #CAR-TYPE (A30)
END-DEFINE
*
FORMAT SF=3 PS=21
*
READ (50) CARS PHYSICAL
COMPRESS YEAR MAKE MODEL INTO #CAR-TYPE
DISPLAY NOTITLE 5T' ' *COUNTER (UC= NL=4)
'TIPO/DE/CARRO' #CAR-TYPE
'COR' COLOR
END-READ
276
Processamento Seqencial
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
TIPO
DE
CARRO
------------------------------
----------
1980
1980
1980
1985
1984
1982
1982
1982
1982
1980
1983
1986
1984
1984
1982
1982
ROUGE
BLANCHE
GRISE
BLANCHE
ROUGE
BLEUE
GRISE
BLANCHE
BLANCHE
CREME
GRISE
GRISE
BLEUE
BLANCHE
BLANCHE
BLEUE
RENAULT R9
RENAULT R5
PEUGEOT 305
PEUGEOT 305
FIAT PANDA
RENAULT R4
RENAULT R18
PEUGEOT 205
FIAT UNO
FIAT UNO
BMW 30
RENAULT R25
CITROEN CX
CITROEN BX 19
RENAULT R5
RENAULT R5
277
COR
Processamento Seqencial
READ BY ISN
278
Processamento Seqencial
Lembre-se!
ISNs no so disponveis em todos os
DBMSs. Tente identificar o tipo de seu DBMSs
para usar essa caracterstica.
279
Processamento Seqencial
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200
0210
0220
0230
**********************************************************************
* ILUSTRA O READ BY ISN
**********************************************************************
DEFINE DATA LOCAL
1 CARS VIEW OF VEHICLES
2 MAKE
2 MODEL
2 COLOR
2 YEAR
1 #CAR-TYPE (A30)
END-DEFINE
*
FORMAT SF=3 PS=21
*
READ (60) CARS BY ISN
COMPRESS YEAR MAKE MODEL INTO #CAR-TYPE
DISPLAY NOTITLE 5T ' ' *COUNTER (UC= NL=4)
'TIPO/DE/CARRO' #CAR-TYPE
'COR' COLOR
'IDENTIFICACAO/DO/REGISTRO' *ISN (NL=6)
END-READ
*
END
280
Processamento Seqencial
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
...
TIPO
DE
CARRO
------------------------------
----------
1980
1980
1980
1985
1984
1982
1982
1982
1982
1980
1983
1986
1984
1984
1982
1982
ROUGE
BLANCHE
GRISE
BLANCHE
ROUGE
BLEUE
GRISE
BLANCHE
BLANCHE
CREME
GRISE
GRISE
BLEUE
BLANCHE
BLANCHE
BLEUE
RENAULT R9
RENAULT R5
PEUGEOT 305
PEUGEOT 305
FIAT PANDA
RENAULT R4
RENAULT R18
PEUGEOT 205
FIAT UNO
FIAT UNO
BMW 30
RENAULT R25
CITROEN CX
CITROEN BX 19
RENAULT R5
RENAULT R5
281
COR
IDENTIFICACAO
DO
REGISTRO
------------1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Processamento Seqencial
READ LOGICAL
Essa instruo gera um loop de processamento para
acessar os dados no qual os registros so retornados na
ordem ascendente de um campo chave. A busca comea
com o primeiro registro que satisfaz o valor definido no
campo chave e continua at o fim do arquivo. Podemos
interromper esse processamento estabelecendo um limite
ou escapando do loop.
O READ LOGICAL indicado para a leitura de um nmero
grande de registro em que a ordem importante. Esse tipo
de instruo bem eficiente quando os registros do banco
so armazenados por ordem de descritor.
282
Processamento Seqencial
Lembre-se!
Use o READ LOGICAL para ler um grande
nmero de registros pela ordem do campo
chave.
A menos que voc defina explicitamente o
nmero de registros a ser lido, ou defina um
valor final, a instruo READ LOGICAL
retorna os registros definidos a partir do valor
especificado de incio e continua at o fim do
arquivo.
283
Processamento Seqencial
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0150
0160
0170
0180
0190
0200
0210
0220
0230
*****************************************************************
* ILUSTRA O INSTRUCAO READ LOGICAL
*****************************************************************
DEFINE DATA LOCAL
1 CARS VIEW OF VEHICLES
2 MAKE
2 MODEL
2 COLOR
2 YEAR
1 #CAR-TYPE (A30)
END-DEFINE
*
FORMAT SF=3 PS=21
READ (50) CARS BY MAKE
COMPRESS YEAR MAKE MODEL INTO #CAR-TYPE
DISPLAY NOTITLE 5T ' ' *COUNTER (UC= NL=4)
'TIPO/DE/CARRO' #CAR-TYPE
'COR' COLOR
'IDENTIFICACAO/DO/REGISTRO' *ISN (NL=4)
END-READ
*
END
284
Processamento Seqencial
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
...
TIPO
DE
CARRO
------------------------------
----------
1985
1984
1984
1977
1983
1977
1983
1983
1986
1982
1980
1984
1985
1984
1985
1984
VERMELHO
ROT
BLAU-MET.
YELLOW
BLACK
YELLOW
ROUGE
BLANCHE
GRISE
WEISS
WEISS
GOLD-MET.
ROT
BLAU-MET.
GOLD-MET.
DUNKELGRAU
285
COR
IDENTIFICACAO
DO
REGISTRO
------------205
206
207
299
302
328
102
103
104
108
109
113
114
118
123
125
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200
********************************************************************
* ILUSTRA O USO DO READ COM OPCAO DE STARTING FROM / ENDING AT
********************************************************************
DEFINE DATA LOCAL
1 EMP VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 FIRST-NAME
2 NAME
2 DEPT
2 JOB-TITLE
1 #START (A20)
1 #END
(A20)
1 #MAX
(P2)
END-DEFINE
*
FORMAT SF=3 PS=21
*
INPUT /// '
ENTRE COM O NOME INICIAL:' #START (AD=AIT'_')
/ '
E O NOME FINAL:' #END
(AD=AIT'_')
/ 'NUMERO DE REGISTROS A SEREM LIDOS:' #MAX
288
(AD=AIT'_')
Continuao
0210
0220
0230
0240
0250
0260
*
READ (#MAX) EMP BY NAME STARTING FROM #START THRU #END
DISPLAY NOTITLE FIRST-NAME / 2X NAME DEPT PERSONNEL-ID JOB-TITLE
END-READ
*
END
Tela de Input:
ENTRE COM O NOME INICIAL: ____________________
E O NOME FINAL: ____________________
NUMERO DE REGISTROS A SEREM LIDOS: ___
289
Continuao
FIRST-NAME
DEPARTMENT
PERSONNEL
NAME
CODE
ID
-------------------------------------
CURRENT
POSITION
-------------------------
VIRGINIA
JONES
MARSHA
JONES
ROBERT
JONES
LILLY
JONES
EDWARD
JONES
MARTHA
JONES
LAUREL
JONES
KEVIN
...
290
SALE30
20007500
MANAGER
MGMT10
20008400
DIRECTOR
TECH10
20021100
PROGRAMMER
MGMT10
20000800
SECRETARY
TECH10
20001100
DBA
SALE00
20002000
TRAINEE
SALE20
20003400
SALES PERSON
COMP12
30034045
V D U OPERATOR
A clausula WHERE
O READ LOGICAL com a clausula WHERE fornece outro mtodo para
definir um critrio de pesquisa. Ela permite que voc verifique os
valores de dados que no foram definidos como chave.
Lembre-se!
A clausula WHERE diferente das clausulas
WITH/BY em dois aspectos:
1. O campo definido na clausula WHERE no
precisa ser descritor;
2. As opes que seguem a clausula WHERE
so condies lgicas (igual, menor que, maior
que, etc.).
291
Lembre-se!
Todo critrio com a clausula WHERE avaliado aps
a leitura dos registros pelo DBMS e antes que qualquer
processamento seja executado no registro.
Se um processamento com limites definido numa
declarao READ contendo a clausula WHERE, os
registros rejeitados como resultado no so testados
contra o limite.
Evite usar a clausula WHERE em loops de
processamento que contenham as declaraes
UPDATE ou DELETE. Em alguns DBMS a clausula
WHERE pode rejeitar registros suficientes para exceder
o nmero permitido de registros em hold.
292
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200
*****************************************************************
* ILUSTRA A DECLARACAO READ COM A CLAUSULA WHERE
******************************************************************
DEFINE DATA LOCAL
1 EMP VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 FIRST-NAME
2 NAME
2 DEPT
2 JOB-TITLE
2 SALARY (1)
END-DEFINE
*
FORMAT SF=3 PS=20
*
READ EMP BY PERSONNEL-ID WHERE SALARY (1) = 60000
DISPLAY NOTITLE PERSONNEL-ID SALARY(1) JOB-TITLE FIRST-NAME / 2X NAME
END-READ
*
END
293
PERSONNEL
ID
---------
ANNUAL
SALARY
----------
CURRENT
POSITION
-------------------------
FIRST-NAME
NAME
--------------------HEINZ
GRAF
HAZEL
WYLLIS
RICHARD
GEE
11700312
60000
SYSTEMBERATER
20000900
60000
DIRECTOR
20021900
60000
DIRECTOR
294
Processamento Randmico
Declarao FIND
Gera um loop de processamento onde os registros no so retornados
numa ordem especfica ao definir-se a chave. No ADABAS, os registros so
retornados por ordem de ISN.
Uso de variveis de sistema
*NUMBER
Em alguns DBMSs essa varivel contm o nmero de registros que
satisfizeram o critrio da clausula WITH.
*COUNTER
uma varivel automaticamente incrementada a cada interao do loop
de leitura. Se for referenciada fora do loop de processamento ao qual
ela se aplica, a referncia deve ser fornecida.
295
Processamento Randmico
Lembre-se!
A menos que a opo SORT seja usada, a
declarao FIND retorna os registros numa ordem
qualquer.
Quando estiver fazendo atualizaes com a
declarao FIND, importante lembrar que todos os
registros so colocados em hold.
Os campos que voc definiu aps a declarao WITH
devem ser campos do banco definidos na view. Esse
campo deve ser um descritor.
296
Processamento Randmico
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200
0210
0220
0230
0240
0250
*****************************************************************
* EXEMPLO DO USA DA DECLARACAO FIND
*****************************************************************
DEFINE DATA LOCAL
1 CARS VIEW OF VEHICLES
2 MAKE
2 MODEL
2 COLOR
2 YEAR
1 #CAR-TYPE (A30)
1 #MARCA
(A20)
END-DEFINE
*
FORMAT SF=3 PS=21
*
INPUT /// 10T 'POR FAVOE ENTRE COM A MARCA DESEJADA:' #MARCA (AD=AIT'_')
*
F1.
FIND CARS WITH MAKE = #MARCA
COMPRESS YEAR MAKE MODEL INTO #CAR-TYPE
DISPLAY NOTITLE 5T ' '*COUNTER (UC= NL=3 AD=I) 'TIPO/DE/CARRO' #CAR-TYPE
'COR' COLOR 'IDENTIFICACAO/DO/REGISTRO'*ISN (NL=3)
END-FIND
*
END
297
Processamento Randmico
TIPO
1
2
3
4
5
6
7
8
9
10
...
COR
IDENTIFICACAO
DE
CARRO
--------------------------------------1984
1982
1980
1980
1985
1985
1984
1982
1984
1984
FIAT
FIAT
FIAT
FIAT
FIAT
FIAT
FIAT
FIAT
FIAT
FIAT
PANDA
UNO
UNO
PANDA
UNO
PANDA 45
RITMO 75 CL
127 S
DINO
DINO
298
ROUGE
BLANCHE
CREME
ROUGE
GRISE
GELB
GRUEN-MET.
ROTBRAUN
BLUE
BLUE
DO
REGISTRO
------------5
9
10
17
105
176
177
178
312
341
Processamento Randmico
Instruo FINDSORTED BY
Lembre-se, quando usa-se a declarao FIND os registros
so retornados numa ordem qualquer. Voc pode controlar a
ordem em que os registros so retornados ao programa
usando a clausula SORTED BY. Com essa chave voc pode
definir at 3 campos chaves.
Exemplo:
FIND CARS WITH
MAKE ='BMW' THRU 'FORD'
SORTED BY COLOR
END-FIND
299
Processamento Randmico
Lembre-se!
Enquanto o FINDSORTED BY permite que voc
classifique os dados numa ordem especfica, ele pode,
por outro lado deixar o processamento de sua mquina
mais lento quando houver muitos arquivos para
classificar.
Outras opes para retornar os dados classificados
incluem o uso das declaraes READ LOGICAL ou
instrues de SORT.
300
Clausula WHERE
Com a clausula WHERE da declarao FIND voc pode
especificar um critrio de seleo adicional que avaliado
aps os registros terem sido lidos e antes que o
processamento seja executado no registro.
301
Lembre-se!
Todo critrio que usa a clausula WHERE so
avaliados aps os registros terem sido lidos pelo DBMS
e antes que qualquer processamento seja executado.
Se um limitador definido junto com a declarao
FIND que contm a clausula WHERE, os registros
rejeitados como resultado da clausula WHERE no so
testados contra o limitador.
Evite usar a clausula WHERE em loops de
processamento contendo a declarao UPDATE ou
DELETE.
302
303
1
2
3
4
5
6
7
8
9
10
TIPO
DE
CARRO
------------------------------
----------
1983
1983
1983
1983
1983
1983
1983
1983
1983
1983
BLAU
METAL BL$
METAL GR$
WHITE
WHITE
WHITE
WHITE
YELLOW
YELLOW
BLUE
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
TRANSIT
FIESTA
ESCORT 1.3
ESCORT
ESCORT
ESCORT
ESCORT
ESCORT
ESCORT
ESCORT 1.3
304
COR
305
Lembre-se!
FIND NUMBER uma declarao de acesso
randmico.
Nenhum registro do banco retornado com o seu
uso.
Essa declarao no inicia loop de
processamento, portanto no exige o END-FIND.
As clausulas WHERE, SORTED BY e IF NO
RECORDS FOUND no esto disponveis para ela.
Ela bem eficiente quando usada com um banco
do tipo relational-like.
306
0010 ******************************************************************
0020 * EXEMPLO DO USO DO FIND NUMBER
0030 ******************************************************************
0040 DEFINE DATA LOCAL
0050 1 CARS VIEW OF VEHICLES
0060 2 MAKE
0070 2 MODEL
0080 2 COLOR
0120 END-DEFINE
0130 *
0160 INPUT /// 10T 'POR FAVOR ENTRE COM A MARCA DESEJADA:' #MAKE
(AD=AIT'_')
0170 *
0180 F1.
0190 FIND NUMBER CARS WITH MAKE = FORD
0200
AND COLOR = BLUE
0220 WRITE NOTITLE // 5T O numero de carros FORD azuis sao: *number
0270 END
307
38
Instruo HISTOGRAM
Essa declarao pode ser usada tanto para ler apenas os
valores de um campo do banco, como para determinar o
nmero de registros que passaram pelo critrio de
pesquisa definido.
308
Lembre-se!
Deve-se incluir uma user view na declarao DEFINE
DATA que define somente o campo descritor atravs
do qual o HISTOGRAM se guiar.
Somente um descritor pode ser definido por
declarao HISTOGRAM.
Se a clausula WHERE estiver sendo usada, ela s
poder conter um critrio que utilize o mesmo descritor
de HISTOGRAM.
As clausulas STARTING FROM e ENDING AT esto
disponveis; assim como as variveis de sistema
*COUNTER e *NUMBER.
309
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
****************************************************************
* EXEMPLO DO USO DA DECLARACAO HISTOGRAM
****************************************************************
DEFINE DATA LOCAL
1 CARS VIEW OF VEHICLES
2 MAKE
END-DEFINE
*
H1. HISTOGRAM CARS FOR MAKE
DISPLAY NOTITLE 25T 'NBR' *NUMBER (NL=3) 2X MAKE
END-HISTOGRAM
*
WRITE // 20T 'NUMERO DE MARCAS DIFERENTES:' *COUNTER (H1.)
*
END
310
Sada:
NBR
---3
3
29
25
37
57
29
1
10
1
16
...
15
16
MAKE
-------------------ALFA ROMEO
AMERICAN MOTOR
AUDI
AUSTIN
BMW
CHRYSLER
CITROEN
DAIHATSU
DATSUN
FERRARI
FIAT
VOLVO
VW
NUMERO DE MARCAS DIFERENTES:
311
45
Instruo GET
usada para operaes que envolvem um nico registro.
Segue algumas caractersticas:
Retorna um registro do banco atravs de um ISN
conhecido. A varivel *ISN pode ser usada para fornecer o
valor do ISN, caso o registro tenha sido previamente
acessado.
O registro retornada atravs do GET pode ser colocado
em hold para um processamento posterior. Somente o
atual usurio pode atualizar o registro posto em hold.
uma forma eficiente de acessar um nico registro.
312
Lembre-se!
Assim como a varivel de sistema *ISN, a
declarao GET no est disponvel para
todos os DBMS.
313
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0120
0130
0140
0150
0160
0170
0180
0190
0200
0210
***********************************************************
* EXEMPLO DO USO DA DECLARACAO GET
***********************************************************
DEFINE DATA LOCAL
1 EMP VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 NAME
2 FIRST-NAME
2 JOB-TITLE
2 SALARY(1)
END-DEFINE
*
FORMAT PS=21
*
READ-ISN.
READ (5) EMP BY ISN
DISPLAY NOTITLE (SF=7) 8T'IDENTIFICACAO/DO/REGISTRO(ISN)' *ISN
PERSONNEL-ID 'NOME' NAME(AL=9)
'SALARIO' SALARY(1)
END-READ
314
Continuao
0230
0240
0250
0260
0270
0280
0290
0300
0310
0320
0330
0340
0350
************************************************************************
* A VARIAVEL *ISN IRA CONTER O VALOR DO ISN DO ULTIMO REGISTRO ACESSADO
************************************************************************
*
GET EMP *ISN (READ-ISN.)
*
WRITE NOTITLE
/ 'O ULTIMO REGISTROLIDO FOI:' //
3X 'ISN:
' *ISN(AL=3 AD=L)/
3X 'PERSONNEL ID:' PERSONNEL-ID /
3X 'NOME:
' NAME /
*
END
315
Sada:
IDENTIFICACAO
DO
REGISTRO(ISN)
------------1
2
3
4
5
O ULTIMO REGISTROLIDO FOI:
ISN:
5
PERSONNEL ID: 50004900
NOME:
CAOUDAL
316
PERSONNEL
ID
NOME
---------
---------
50005800
50005600
50005500
50005300
50004900
ADAM
MORENO
BLOND
MAIZIERE
CAOUDAL
SALARIO
---------159980
165810
172000
166900
167350
Expresses Lgicas
Ao definir os critrios de seleo nas declaraes READ ou
FIND, voc pode fazer uso de condies lgicas. Ou seja,
voc pode escolher um intervalo de valores para seus
dados tais como: salrios menores que $30.000 ou nome
igual a SMITH. Essas condies so introduzidas no
programa atravs das expresses lgicas, que classificamse em dois tipos:
Condies Simples,
Condies Mltiplas
317
Lembre-se!
Se voc estiver usando mais que uma
expresso lgica simples e/ou lgica
booleana, voc deveria usar um dos
seguintes conectores:
()
NOT
AND
OR
THRU
318
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
************************************************************
* EXEMPLO DO FIND COM OPERADORES
************************************************************
DEFINE DATA LOCAL
1 CARS VIEW OF VEHICLES
2 MAKE
2 MODEL
2 COLOR
2 YEAR
END-DEFINE
*
FORMAT SF=3 PS=21
FIND CARS WITH (MAKE='FORD' OR='HONDA')
AND (COLOR ='BLUE' OR ='RED')
SORTED BY COLOR
DISPLAY NOTITLE MAKE MODEL COLOR YEAR
END-FIND
*
END
319
MAKE
--------------------
MODEL
--------------------
COLOR
----------
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
MERCURY
MERCURY
MERCURY
MERCURY
MUSTANG
GRANADA
MUSTANG
LTD
LTD
ORION 1.6
ORION 1.6
ORION 1.6
ORION 1.6
ORION 1.6
ORION 1.6
ORION 1.6
ORION 1.6
ORION 1.6
BLUE
BLUE
BLUE
BLUE
BLUE
BLUE
BLUE
BLUE
BLUE
BLUE
BLUE
BLUE
BLUE
BLUE
BLUE
BLUE
BLUE
BLUE
320
GHIA
GHIA
GHIA
GHIA
GHIA
GHIA
GHIA
GHIA
GHIA
YEAR
----1982
1986
1982
1986
1984
1977
1977
1982
1982
1985
1985
1985
1985
1985
1985
1985
1986
1986
Lembre-se!
Essas declaraes podem ser colocadas em
qualquer lugar no seu loop de processamento.
O campo usado para base de critrio pode
ser tanto descritor como no-descritor.
Se uma declarao LIMIT ou outra notao
de limite for definido para o loop de
processamento junto com ACCEPT e
REJECT, cada registro processado avaliado
contra o limite para ser aceito ou rejeitado.
322
323
0010 *********************************************************
0020 * EXEMPLO DA CLAUSULA IF NO RECORDS FOUND
0030 *********************************************************
0040 DEFINE DATA LOCAL
0050 1 EMPLOY-VIEW VIEW OF EMPLOYEES
0060 2 PERSONNEL-ID
0070 2 NAME
0080 1 #PERS-NR (A8)
0090 END-DEFINE
0100 *
0110 REPEAT
0120
INPUT 'ENTRE COM A IDENTIFICACAO DO FUNCIONARIO:' #PERS-NR
0130
IF #PERS-NR = ' '
0140
ESCAPE BOTTOM
0150
END-IF
0160
FIND EMPLOY-VIEW WITH PERSONNEL-ID = #PERS-NR
0170
IF NO RECORDS FOUND
0180
REINPUT 'NENHUM REGISTRO ENCONTRADO'
0190
END-NOREC
0200
DISPLAY NOTITLE NAME
0210 END-FIND
0220 END-REPEAT
0230 *
0240 END
324
Acesso Mltiplo-Arquivo
Acesso Mltiplo-Arquivo
Linhas Gerais
Para executar o acoplamento, deve existir um campo
chave comum em cada arquivo.
O acoplamento lgico uma tcnica de codificao em
Natural.
O acoplamento Soft executado pelo seu DBMS.
326
Acesso Mltiplo-Arquivo
Acoplamento Lgico
327
Acesso Mltiplo-Arquivo
0010 ************************************************************
0020 * EXEMPLO DE ACOPLAMENTO LOGICO
0030 ************************************************************
0040 DEFINE DATA LOCAL
0050 1 CARS VIEW OF VEHICLES
0060 2 MAKE
0070 2 PERSONNEL-ID
0080 2 MODEL
0090 2 COLOR
0100 *
0110 1 EMPL VIEW OF EMPLOYEES
0120 2 PERSONNEL-ID
0130 2 NAME
0140 2 FIRST-NAME
0150 END-DEFINE
0160 *
0170 FIND EMPL WITH NAME = 'JONES'
0180
FIND CARS WITH PERSONNEL-ID = EMPL.PERSONNEL-ID AND MAKE = 'FORD'
0190
DISPLAY PERSONNEL-ID MAKE (AL=10) MODEL (AL=10) COLOR *NUMBER
0200
FIRST-NAME (AL=10) NAME (AL=10)
0210
END-FIND
0220 END-FIND
0230 *
0240 END
328
Acesso Mltiplo-Arquivo
Sada:
PERSONNEL-ID
MAKE
MODEL
COLOR
NMBR
FIRST-NAME
NAME
------------ ---------- ---------- ---------- ----------- ---------- ---------20000800
30034233
FORD
FORD
ESCORT
BLACK
ESCORT 1.3 GREEN
329
1 LILLY
1 GREGORY
JONES
JONES
Acesso Mltiplo-Arquivo
Acoplamento Soft
330
Acesso Mltiplo-Arquivo
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200
0210
0230
0240
************************************************************
* EXEMPLO DE ACOPLAMENTO LOGICO
************************************************************
DEFINE DATA LOCAL
1 CARS VIEW OF VEHICLES
2 MAKE
2 PERSONNEL-ID
2 MODEL
2 COLOR
*
1 EMPL VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 NAME
2 FIRST-NAME
END-DEFINE
*
FIND CARS WITH MAKE = FORD AND COUPLED TO EMPL
VIA PERSONNEL-ID = PERSONNEL-ID WITH NAME= 'JONES'
DISPLAY PERSONNEL-ID MAKE MODEL) COLOR *NUMBER
END-FIND
*
END
331
Acesso Mltiplo-Arquivo
PERSONNEL-ID
MAKE
MODEL
COLOR
NMBR
------------ -------------------- -------------------- ---------- ----------20000800
FORD
ESCORT
BLACK
30034233
FORD
ESCORT 1.3
GREEN
332
MDULO VI - Relatrios
333
Display
Produz uma sada em formato de coluna onde cada coluna
representada pelo valor do campo. A ordem de exibio segue
a seqncia na qual os campos so definidos. Alm disso,
possui um cabealho (title), que consiste do nmero da pgina,
hora e data.
Sintaxe
DISPLAY [(rep)] [NOTITLE] [NOHDR] [parmetros] {elemento de sada
[/]}
elemento de sada = [{ nX, nT}] [{=, text, c(n)}] [=]
operando 1 [(parmetros)]
334
Write
Produz uma sada em formato livre. Quando o tamanho do
texto no couber na linha definida h um avano automtico
para a linha seguinte. No possui cabealhos automticos.
Sintaxe
WRITE [(rep)] [NOTITLE] [{nX, nT, x/y}] [{{text, c(n)}, =,
/}] operando 1
Caractersticas
DISPLAY
WRITE
Coluna
Linha
Sim
Sim
Sim
No
No
Sim
Orientao da sada
Determinado pelo
campo maior cabealho ou o
prprio campo.
337
Determinado pelo
tamanho do campo.
Caractersticas
DISPLAY
WRITE
Controlado pelo
parmetro
Spacing Factor,
mas pode ser
sobreposto pelas
notaes nX e
nT. O padro
um espao.
Uso da barra /
Impresso de Arrays
338
Exibio de atributos
Parmetro AD
Controla a forma na qual os campos so exibidos.
Representao (normal, intensificado, etc);
Alinhamento (esquerda, direita, zeros)
Caracteres (maisculos, minsculos, misturados).
Parmetro CD
Define a cor na qual os campos so exibidos
. Exemplo:
DISPLAY NAME (AD=I CD=YE) HOME TOWN(AD=I CD=BL) CITY(AD=DR)
WRITE THE NUMBER OF CARS: (AD=I) #CNT (CD=RE AD=IL)
339
Parmetros de Sesso
Parmetros
Cdigos
Valores
Disponvel p/
declarao(es)
LS
Line Size
10-250
DISPLAY e WRITE
10-250
DISPLAY e WRITE
1-30
DISPLAY
Default=tamanho do dispositivo
PS
Page Size
Default=tamanho do dispositivo
SF
Spacing Factor
default=1
AL
Alphanumeric Length
1-tamanho da
linha
DISPLAY e WRITE
NL
Numeric Length
1-tamanho da
linha
DISPLAY e WRITE
340
Parmetros de Sesso
Cdigos
Parmetros
Valores
Disponvel p/
declarao(es)
HC
Header Centering
Center, Left, e
Rigth
DISPLAY
default=center
FC
GC
UC
Filler Character
Qualquer caracter
default=branco
Qualquer caracter
DISPLAY
DISPLAY
default=branco
Qualquer caracter
DISPLAY
default=hfen
DF
Date Format
341
DISPLAY e WRITE
Parmetros de Sesso
Cdigos
Parmetros
Valores
Disponvel p/
declarao(es)
IS
Identical Supress
ON/OFF
DISPLAY, WRITE,
FORMAT
default=ON
ES
342
ON/OFF
default=OFF
DISPLAY, WRITE,
FORMAT
Parmetros de Sesso
FIELD LEVEL
Hierrquia:
STATEMENT LEVEL
PROGRAM LEVEL
SESSION LEVEL
SYSTEM LEVEL
343
*LINE-COUNT
Indica a linha atual contida na pgina do relatrio;
Um contador separado mantido para cada relatrio
grado pelo programa;
O valor desse contador atualizado durante a execuo
das declaraes WRITE, SKIP, DISPLAY, PRINT ou INPUT;
As instrues NEWPAGE e EJECT limpam esse valor.
Seu formato/tamanho P5 e seu contedo no pode ser
modificado.
344
*PAGE-NUMBER
Indica o nmero da pgina atual do relatrio;
Um contador separado mantido para cada relatrio grado
pelo programa;
Um programa Natural pode modificar essa varivel;
O seu valor atualizado durante a execuo das
declaraes WRITE, SKIP, DISPLAY ou NEWPAGE;
A declarao EJECT no provoca a atualizao do
contador;
Seu formato/tamanho P5.
345
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
************************************************************************
** ILUSTRA O USO DAS VARIAVEIS DE SISTEMA *PAGE-NUMER E *LINE-COUNT
************************************************************************
DEFINE DATA
LOCAL USING LOC1
EM-DEFINE
*
WRITE TITLE 'PAGE:'*PAGE-NUMBER (AD=L) 70T *DAT4E //
'********************** RELATORIO DE CARROS ********************' (AD=I)
SKIP 1
READ CARS BY MAKE
IF *LINE-COUNT GT 21 THEN
NEWPAGE
/* NEWPAGE RESETS *LINE-COUNT
END-IF
DISPLAY (HC=L) 15X 'MARCA E MODELO' (AD=I) MAKE / ' ' MODEL
10X 'COR DO CARRO E' (AD=I) COLOR / 'MODELO DO ANO' (AD=I) YEAR
SKIP 1
END-READ
END
346
Sada:
PAGE: 1
05/02/2003
********************** RELATORIO DE CARROS ********************
MARCA E MODELO
--------------------
COR DO CARRO E
MODELO DO ANO
--------------
ALFA ROMEO
GIULIETTA 2.0
VERMELHO
1985
ALFA ROMEO
SPRINT GRAND PRIX
ROT
1984
ALFA ROMEO
QUADRIFOGLIO
BLAU-MET.
1984
AMERICAN MOTOR
HORNET
YELLOW
1977
347
EJECT
Provoca um avano de pgina sem a impresso dos ttulos e
cabealhos. freqentemente usada com uma condio
que avalia o nmero de linhas a vencer na pgina.
EJECT (rep.)
Se voc est produzindo vrios relatrios, o repositrio de
relatrio (rep) pode ser usado para identificar a que relatrio
pertence a declarao EJECT.
348
NEWPAGE
Provoca um avano de pgina com a impresso dos ttulos e
cabealhos. Se EJECT ou NEWPAGE no forem usadas, o
avano de pgina controlado automaticamente pelo
parmetro de sesso Natural Page Size (PS).
SKIP
Gera uma ou mais linhas em branco. Voc pode definir o
nmero de linhas em branco que sero introduzidas. Essa
declarao no executada dentro da condio AT-TOPOF-PAGE.
349
Exemplo: EJECT
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
************************************************************************
* ILUSTRA O USO DA DECLARACAO EJECT
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
2 NAME
2 CITY
2 DEPARTMENT
END-DEFINE
*
FORMAT PS=10
READ VIEWEMP BY CITY STARTING FROM 'ARLINGTON'
DISPLAY NOTITLE 'LOCALIZACAO' CITY (IS=ON) NAME 'DEPT' DEPARTMENT
SKIP 1
AT BREAK OF CITY
EJECT
END-BREAK
END-READ
END
350
Sada:
Page
03-02-0514:50:23
LOCALIZACAO
NAME
DEPT
-------------------- -------------------- ---ARLINGTON
LORIE
TECH
ELLIOT
SALE
BRANDIN
MGMT
ASHBOURNE
351
DALE
PROD
BURTON
TECH
Exemplo: NEWPAGE
Page
03-02-05
14:45:12
03-02-05
14:47:43
LOCALIZACAO
NAME
DEPT
-------------------- -------------------- ---ARLINGTON
Page
LORIE
TECH
ELLIOT
SALE
BRANDIN
MGMT
LOCALIZACAO
NAME
DEPT
-------------------- -------------------- ---ASHBOURNE
DALE
PROD
BURTON
TECH
352
Exemplo
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200
0210
************************************************************************
* ILUSTRA O SUO DA DECLARACAO WRITE TITLE E WRITE TRAILER
************************************************************************
DEFINE DATA
LOCAL
1 #CNT
(N2)
1 #REG-NUM (A20)
1 CARS VIEW OF VEHICLES
2 REG-NUM
2 MAKE
2 MODEL
2 COLOR
2 YEAR
END-DEFINE
*
FORMAT PS=20
WRITE TITLE UNDERLINED 1T *DAT4E 70T *TIMX
/ 'SISTEMA DE WORKSHOP - RELATORIO'
SKIP 1
WRITE TRAILER / '-' (79)
'PAGE:' *PAGE-NUMBER (AD=L)
355
Exemplo
0220
0230
0240
0250
0260
0270
0280
0290
0300
0310
0320
356
Exemplo
Sada:
NUMERO DE REGISTROS:
357
22___
Exemplo
05/02/2003
18:01:28
CITROEN
ALFA ROMEO
AUSTIN
TALBOT
AUSTIN
LADA
CITROEN
VAUXHALL
VAUXHALL
AUDI
AUSTIN
AUSTIN
VAUXHALL
BX LEADER
SPRINT GRAND PRIX
MINI
SOLARA
MINI
RIVA
CV2
ASTRA 1.3
CHEVETTE
90 QUATTRO
MINI
MINI
ASTRA 1.3
1985
1984
1980
1983
1980
1982
1982
1982
1982
1984
1981
1981
1984
---------------------------------------------------------------------------PAGE:
1
358
Exemplo
05/02/2003
18:05:13
SISTEMA DE WORKSHOP - RELATORIO
-----------------------------------------------------------------------------REGISTRO
MAKE
MODEL
ANO
--------------- -------------------- -------------------- ----A567
A567
A612
A632
A654
A654
A655
A657
A665
EGH
VVF
CGH
DGH
BUN
YHR
FGH
ERB
TAT
VAUXHALL
VAUXHALL
FORD
FORD
CITROEN
VAUXHALL
FORD
VAUXHALL
FORD
NOVA
NOVA
ESCORT 1.3
FIESTA
PALLAS
CAVALIER
ESCORT 1.3
ASTRA 1.3
ORION 1.6
1983
1983
1984
1984
1983
1983
1983
1983
1983
22
-----------------------------------------------------------------------------PAGE:
2
359
AT TOP OF PAGE
Executa um processamento quando uma nova pgina
iniciada. Essa declarao executada quando o tamanho
lgico da pgina encontrado ou devido a uma instruo
NEWPAGE. A sada impressa uma linha abaixo do ttulo.
AT END OF PAGE
Executa um processamento quando o fim da pgina
detectado ou devido a instruo SKIP, NEWPAGE. A
checagem do fim da pgina feita aps o processamento
das instrues DISPLAY ou WRITE. A sada impressa
aps qualquer informao de rodap.
360
EXEMPLO:
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200
************************************************************************
* ILUSTRA O USO DA INSTRUCAO AT TOP OF PAGE E AT END OF PAGE
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
2 NAME
2 FIRST-NAME
2 CITY
END-DEFINE
*
WRITE TITLE '**********TITULO*************'
SKIP 2
WRITE TRAILER '*********RODAPE*************'
*
AT TOP OF PAGE
WRITE ' ESTE EH O LUGAR ONDE EH IMPRESSO O TOPO DA PAGINA'
END-TOPPAGE
AT END OF PAGE
WRITE ' ESTE EH O LUGAR ONDE EH IMPRESSO O FIM DA PAGINA'
END-ENDPAGE
361
0210
0220
0230
0240
0250
0260
0270
0280
0290
0300
0310
*
READ (10) VIEWEMP BY NAME
AT START OF DATA
WRITE ' INICIO DOS DADOS...'
END-START
DISPLAY NAME FIRST-NAME CITY
AT END OF DATA
WRITE ' FIM DOS DADOS'
END-ENDDATA
END-READ
END
362
**********TITULO*************
ABELLAN
ACHIESON
ADAM
ADKINSON
ADKINSON
FIM DOS DADOS
KEPA
ROBERT
SIMONE
PHYLLIS
HAZEL
MADRID
DERBY
JOIGNY
BEVERLEY HILLS
NEW YORK
*********RODAPE*************
ESTE EH O LUGAR ONDE EH IMPRESSO O FIM DA PAGINA
363
Instruo PRINT
364
Instruo PRINT
Exemplo:
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
************************************************************************
** ILUSTRA O USO DA DECLARACAO PRINT
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
2 NAME
2 FIRST-NAME
2 JOB-TITLE
END-DEFINE
*
READ (4) VIEWEMP BY NAME STARTING FROM 'A'
WRITE NOTITLE /
'EXEMPLO DO WRITE =' NAME 'TRABALHA COMO UM ' JOB-TITLE
PRINT
'EXEMPLO DO PRINT =' NAME 'TRABALHA COMO UM ' JOB-TITLE
END-READ
END
365
Instruo PRINT
Sada:
EXEMPLO DO WRITE = ABELLAN
TRABALHA COMO UM
MAQUINISTA
EXEMPLO DO PRINT = ABELLAN TRABALHA COMO UM MAQUINISTA
EXEMPLO DO WRITE = ACHIESON
TRABALHA COMO UM
DATA BASE ADMINISTRATOR
EXEMPLO DO PRINT = ACHIESON TRABALHA COMO UM DATA BASE ADMINISTRATOR
EXEMPLO DO WRITE = ADAM
TRABALHA COMO UM
CHEF DE SERVICE
EXEMPLO DO PRINT = ADAM TRABALHA COMO UM CHEF DE SERVICE
EXEMPLO DO WRITE = ADKINSON
TRABALHA COMO UM
DBA
EXEMPLO DO PRINT = ADKINSON TRABALHA COMO UM DBA
366
MDULO VI - Relatrios
Instruo SORT
Processamento de quebra automtico
Instrues de quebra
Funes do Sistema
367
Instruo SORT
Descrio
Especifica at 10 campos de classificao.
USING
GIVE
368
Instruo SORT
Lembre-se!
Antes de usar a declarao SORT, voc deve fechar
todos os processamentos de loop com a clausula ENDALL;
Voc deve definir at 10 campos de classificao. Cada
campo pode ser classificado em ordem ascendente ou
descendente;
Campos de classificao podem ser variveis definidas
pelo usurio ou campos do banco, sendo escritores ou
no;
A declarao SORT inicia seu prprio processamento
de loop e termina com a declarao END-SORT;
Para processar um nmero grande de registros use o
processamento batch.
369
Instruo SORT
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
***********************************************************************
* ILUSTRA O USO DA DECLARACAO SORT
***********************************************************************
DEFINE DATA LOCAL
1 EMPVIEW VIEW OF EMPLOYEES
2 NAME
2 JOB-TITLE
2 CITY
2 DEPT
END-DEFINE
*
FIND EMPVIEW WITH DEPT = 'TECH10'
END-ALL
SORT BY CITY NAME USING JOB-TITLE
DISPLAY NOTITLE CITY (IS=ON) NAME JOB-TITLE
END-SORT
END
370
Instruo SORT
CITY
CURRENT
POSITION
-------------------- -------------------- ------------------------ALBUQUERQUE
ANN ARBER
ARGONNE
ARLINGTON
AUSTIN
BALTIMORE
BEDFORD
BERKELEY
BEVERLEY HILLS
BIRMINGHAM
BOSTON
BOULDER
BUFFALO
CAMDEN
NAME
LINCOLN
MARON
ROLLING
LORIE
HALL
ALEXANDER
ZINN
BONNER
SMITH
ADKINSON
GUTENBERG
PERREAULT
STANWOOD
DAY
CHU
FORRESTER
JONES
371
ANALYST
ANALYST
DBA
PROGRAMMER
ANALYST
PROGRAMMER
PROGRAMMER
ANALYST
ANALYST
DBA
ANALYST
PROGRAMMER
PROGRAMMER
PROGRAMMER
ANALYST
PROGRAMMER
DBA
AT START OF DATA
Define o processamento que ir ser executado logo aps a
leitura do primeiro registro. Essa declarao deve estar
dentro de um loop de processamento. Exemplo:
READ VIEW-NAME
AT START OF DATA
(PROCESSING STATEMENTS)
END-START
END-READ
372
AT END OF DATA
Define o processamento que ir ser executado logo aps
todos os registros do loop de processamento terem sido
processados. Essa declarao deve estar dentro de um loop
de processamento. Exemplo:
READ VIEW-NAME
AT END OF DATA
(PROCESSING STATEMENTS)
END-ENDDATA
END-READ
373
AT BREAK
Define um processamento a ser executado sempre que um
controle de quebra ocorrer; ou seja, sempre que o valor de
um campo definido para essa declarao muda. Geralmente
esses campos so campos do banco. Exemplo:
READ VIEW-NAME
AT BREAK OF DEPT
(PROCESSING STATEMENTS)
END-BREAK
END-READ
374
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200
************************************************************************
** ILUSTRA O USO DA DECLARACAO AT BREAK
************************************************************************
DEFINE DATA LOCAL
1 EMP VIEW OF EMPLOYEES
2 FIRST-NAME
2 NAME
2 DEPT
2 REDEFINE DEPT
3 #DEPT (A4)
END-DEFINE
FORMAT PS=21
READ (20) EMP
END-ALL
SORT BY DEPT USING FIRST-NAME NAME
NEWPAGE LESS THAN 5
DISPLAY (AL=15) DEPT FIRST-NAME NAME
AT BREAK DEPT /4/
NEWPAGE LESS THAN 4
PRINT (AD=L) // '-' (79)
375
0210
/ 'NO DEPT: ' OLD(#DEPT) 'HA ' COUNT(DEPT) 'PESSOAS'
0220
SKIP 3
0230
END-BREAK
0240
AT END OF DATA
0250
PRINT (AD=L) / '-' (79)
0260
/ 'ESTATISTICAS FINAIS: HA ' COUNT (NAME) 'PESSOAS'
0270
END-ENDDATA
0280 END-SORT
0290 END
376
Sada:
DEPARTMENT
FIRST-NAME
NAME
CODE
--------------- --------------- --------------COMP01
COMP02
COMP70
COMP70
COMP73
MICHEL
LOUIS
PATRICK
MARC
ANDRE
HEURTEBISE
D'AGOSTINO
BAILLET
LEROUGE
GRUMBACH
377
Sada:
DEPARTMENT
FIRST-NAME
NAME
CODE
--------------- --------------- --------------FINA01
DANIEL
JOUSSELIN
MARK06
JEAN-MARIE
MARX
378
ALEXANDRE
SIMONE
BLOND
ADAM
379
BEFORE BREAK
Define as instrues a serem executadas antes do controle
de quebra, ou seja, antes do valor do campo ser avaliado
independente da posio que ocupa no loop. Exemplo:
READ VIEW-NAME
BEFORE BREAK PROCESSING
(PROCESSING STATEMENTS)
END-BEFORE
END-READ
380
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200
0210
0220
************************************************************************
* ILUSTRA O USO DA DECLARACAO BEFORE BREAK PROCESSING
************************************************************************
DEFINE DATA LOCAL
1 EMP VIEW OF EMPLOYEES
2 CITY
2 COUNTRY
2 JOB-TITLE
2 SALARY (1)
1 #LOCATION (A20)
END-DEFINE
FORMAT SF=3
READ (10) EMP
BY CITY WHERE COUNTRY ='USA'
BEFORE BREAK PROCESSING
COMPRESS CITY 'USA' INTO #LOCATION
END-BEFORE
DISPLAY (HC=L) 'LOCATION' #LOCATION JOB-TITLE SALARY(1) (AD=L)
AT BREAK OF #LOCATION
SKIP 1
END-BREAK
END-READ
END
381
Sada:
LOCATION
--------------------
CURRENT
POSITION
-------------------------
ANNUAL
SALARY
----------
ALBUQUERQUE
ALBUQUERQUE
ALBUQUERQUE
ALBUQUERQUE
SECRETARY
MANAGER
MANAGER
ANALYST
22000
34000
34000
41000
MANAGER
SALES PERSON
ANALYST
36000
30000
43000
ARGONNE USA
ARGONNE USA
SECRETARY
DBA
16000
41500
ARLINGTON USA
PROGRAMMER
35000
USA
USA
USA
USA
382
Funes do Sistema
383
Funo do sistema
AVER
NAVER
MAX
MIN
NMIN
OLD
SUM
TOTAL
384
Funo do sistema
COUNT
NCOUNT
385
386
Parmetro HE
Em nvel de mapa, basta fornecer o nome do objeto na tela
de profile do mapa. Em nvel de campo, basta fazer o
mesmo na tela de edio do campo. O nome do objeto deve
estar entre apstrofes. Exemplo: HE=XXXHH1.
Em vez de definir o nome do objeto , voc pode usar uma
varivel alfanumrica que contenha o nome do objeto (ex.:
#HELP-OBJ). Nesse caso no necessrio o uso de
apstrofes.
388
DATA: 04/02/2003
HORA: 12:49
MAPA: DIAMIAE
PROGRAMA: DIAPINC
INCLUSAO
___________________________________________________________________________
CODIGO:
SOBRENOME:
CIDADE:
CARGO:
SALARIO
_________
1111
Santos______________ NOME: Paula_______________
?___________________
_
ESCOLHA A CIDADE
BONUS
________
_________
1
2
3
4
5
ARARAQUARA
ITU
POA
PINDAMONHANGABA
SANTANA DO PARNAIBA
OPCAO: _
_________
SALARIO
_________
BONUS
_________
_________
____________________________________________________________________________
PF3 - ENCERRA
PF5 - MENU
390
DATA: 04/02/2003
HORA: 12:53
MAPA: DIAMIAE
PROGRAMA: DIAPINC
INCLUSAO
_____________________________________________________________________________
CODIGO:
SOBRENOME:
CIDADE:
CARGO:
SALARIO
_________
1111
SANTOS______________ NOME: PAULA_______________
ARARAQUARA__________
?________________________
SELECIONE O CARGO COM 'X'
BONUS
________
_________
_
_
_
_
_
ACCOUNTANT
ACCOUNTING
ACCOUNTING
ACCOUNTING
ADMIN.BASE
ASSISTANT
CLERK
MANAGER
DE DATOS
_________
SALARIO
_________
BONUS
_________
_________
_______________________________________________________________________________
PF3 - ENCERRA
PF5 - MENU
391
Criando Helprotinas
392
Criando Helprotinas
************************************************************************
0020 * DESCRICAO: ROTINA DE AUXILIO PARA A ESCOLHA DO CAMPO CIDADE
0030 * PROGRAMA : DIAHH1
0040 * MAPAS
: DIAMIAE, DIAMH1
0050 * DATA
: 04/06/2001
AUTOR: DIANA PATRICIA
0060
************************************************************************
0070 DEFINE DATA
0080 PARAMETER
0090 1 #CIDADE-ESCOLHIDA (A20)
0100 LOCAL
0110 1 #OPT
(N1)
0120 1 #I
(I1)
0130 1 #CIDADE (A20/5) INIT (1) <'ARARAQUARA'>
0140
(2) <'ITU'>
0150
(3) <'POA'>
0160
(4) <'PINDAMONHANGABA'>
0170
(5) <'SANTANA DO PARNAIBA'>
0180 END-DEFINE
0190 DEFINE WINDOW HELP
0200 SIZE AUTO
393
Criando Helprotinas
0210
0220
0230
0240
0250
0260
0270
0280
0290
BASE CURSOR
TITLE 'ESCOLHA A CIDADE'
CONTROL WINDOW
FRAMED ON
INPUT WINDOW ='HELP' USING MAP 'DIAMH1'
IF NOT (#OPT=0 OR #OPT GT 5)
MOVE #CIDADE(#OPT) TO #CIDADE-ESCOLHIDA
END-IF
END
394
Janelas Pop-Up
Janelas Pop-Up
396
Parmetro implcito
INPUT #A (A5) (HE=YOURHELP,#HELPME)
397
Lembre-se!
Quando um help chamado, a help rotina chamada
antes dos dados serem passados da tela para rea de
dados. Isto significa que as help rotinas no podem
acessar os dados de entrada dentro da mesma
transao de tela.
Uma vez completo o processamento de help, os
dados da tela so atualizados. Qualquer campo
modificado por uma rotina de help atualizado (com
exceo dos campos modificados pelos usurios antes
da chamada da help rotina).
398
399
Declarao
STORE
UPDATE
DELETE
Exclui todo o registro. Para que o registro seja excludo, ele deve ser
acessado e colocado em hold antes que a excluso ocorra.
400
Protegendo os Dados
Declaraes de Hold
Qualquer registro a ser atualizado ou excludo deve, em
primeiro lugar, ser lido e posto em hold. Usando o registro
colocado em hold para um usurio, ele se torna indisponvel
para atualizao/excluso para outro usurio.
No Natural o registro colocado em hold se estiver dentro
de um loop de processamento das declaraes READ e
FIND. Caso a instruoGET seja usada para acessar o
registro, deve-se usar um label para referenciar o nmero da
linha onde o GET esta sendo emitido.
401
Protegendo os Dados
Ordem do Processamento
1. Uma solicitao feita para colocar o registro em hold a
fim de proceder a atualizao;
2. Uma exigncia feita para verificar se algum j prendeu
o registro;
3. Se ningum estiver prendendo o registro, ele colocado
em hold, e a atualizao/excluso pode seguir;
4. Se algum estiver prendendo o registro, seu DBMS pode
tentar colocar o registro em hold novamente ou enviar uma
mensagem de erro informando que o registro est preso.
402
Transaes Lgicas
403
Transaes Lgicas
Declarao
Descrio
END TRANSACTION
(ET)
BACKOUT
TRANSACTION
(BT)
404
Armazenando Registros
Exemplo:
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
***************************************************************
* ILUSTRA O USO DA DECLARAO STORE
***************************************************************
DEFINE DATA LOCAL
1 CARS VIEW OF VEHICLES
2 PERSONNEL-ID
2 MAKE
2 MODEL
2 COLOR
2 YEAR
1 #PID (A8)
1 #ADD (A4)
END-DEFINE
INPUT (AD=_) ENTER THE OWNER ID: #PID
IF #PID=SCAN QUIT
STOP
END-IF
*
405
Armazenando Registros
Exemplo:
0190 FIND. FIND CARS WITH PERSONNEL-ID = #PID
0200
IF NO RECORDS FOUND
0210
MOVE #PID TO CARS.PERSONNEL-ID
0220
INPUT (AD=_) 10X ADD RECORD
0230
// ID NUMBER: CARS.PERSONNEL-ID (AD=O)
0240
/ MAKE
: CARS.MAKE
0250
/ MODEL
: CARS.YEAR
0260
/ YEAR
: CARS.YEAR
0270
/ COLOR
: CARS.COLOR
0280
/// DO YOU WANT TO ADD THIS RECORD: #ADD
0290 DECIDE ON FIRST VALUE OF #ADD
0300
VALUE YES
0310
STORE CARS
0320
END TRANSACTION
0330
VALUE NO
0340
IGNORE
0350
VALUE QUIT
0360
STOP
406
Armazenando Registros
Exemplo:
0370
0380
0390
0400
0410
0420
0430
0440
0450
NONE VALUE
REINPUT PLEASE ENTER YES, NO, OR QUIT
END-DECIDE
END-NOREC
END-FIND
IF *NUMBER (FIND.) > 0
REINPUT PLEASE ENTER NEW ID NUMBER, RECORD ALREADY EXISTS
END-IF
END
407
Exemplo:
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
***************************************************************
* ILUSTRA O USO DA DECLARAO UPDATE E DELETE
***************************************************************
DEFINE DATA
GLOBAL USING EMPLGDA
LOCAL
1 #LNAME
(A20)
1 #OPTION (A01)
1 #CTLVAR1 (C)
1 #CTLVAR2 (C) INIT <(AD=I CD=GR)>
1 #MESSAGE (A60)
END-DEFINE
REPEAT
INPUT
////PLEASE ENTER A LAST NAME: ==> #LNAME (AD=AILT_)
/ OR ENTER THE WORD QUIT (CD=RE)
IF #LNAME= THEN
REINPUT PLEASE ENTER A LAST NAME OR QUIT. MARK #LNAME
END-IF
408
Exemplo:
0200
IF #LNAME = QUIT
0210
WRITE NOTITLE 10/6 YOU HAVE REQUESTED TO END YOUR SESSION *USER
0220
/ 6T HAVE A NICE DAY!
0230
STOP
0240
END-IF
0250 F1. FIND (1) EMPL-VIEW WITH NAME = #LNAME
0260
IF NO RECORDS FOUND
0270
REINPUT EMPLOYEES:1:NOT FOUND. RE-ENTER NAME OR QUIT. , #LNAME
0280
END-NOREC
0290
INPUT USING MAP CNTLMAP1
0300
DECIDE ON FIRST VALUE OF #OPTION
0310
VALUE Q
0320
ESCAPE BOTTOM
0330
VALUE U
0340
UPDATE (F1.)
0350
END OF TRANSACTION
0360
MOVE UPDATE DONE TO #MESSAGE
0370
MOVE (CD=RE AD=P) TO #CTLVAR2
409
Exemplo:
0380
VALUE D
0390
DELETE(F1.)
0400
END OF TRANSACTION
0410
MOVE DELETE DONE TO #MESSAGE
0420
MOVE (CD=NE AD=P) TO #CTLVAR2
0430
NONE
0440
REINPUT CORRECT VALUES ARE D (DELETE), U (UPDATE), Q (QUIT).
0450
MARK *#OPTION
0460 END-DECIDE
0470 MOVE (AD=P) TO #CTLVAR1
0480 INPUT USING MAP CNTLMAP1
0490 RESET EMPL-VIEW #CTLVAR1 #CTLVAR2 #OPTION #MESSAGE
0500 END-FIND
0510 END-REPEAT
0520 END
410
411
0010 ********************************************************************
0020 * ILUSTRA O USO DA DECLARAO GET PARA REDUZIR O NMERO DE REGISTROS
0030 ********************************************************************
0040 DEFINE DATA LOCAL
0050 1 CARS VIEW OF VEHICLES
0060 2 PERSONNEL-ID
0070 2 MAKE
0080 2 MODEL
0090 2 CLASS
0100 2 REG-NUM
0110 2 MAINT-COST (5)
0120 END-DEFINE
0130 READ CARS BY ISN
0140 IF CLASS = C
/* COMPANY CAR
0150
GET. GET CARS *ISN
/* RE-READ LAST RECORD READ
0160
MAINT-COST(*) := 0
/* NO MAINTENANCE IF COMPANY CAR
0170
UPDATE RECORD (GET.) /* REFER BACK TO THE RECORD OBTAINED WITH GET
0180
END TRANSACTION
0190 END-IF
0200 END-READ
0210 END
412
Processamento Batch
-
413
Viso Geral
Enter the
ID:___
PROCESSAMENTO BATCH
PROCESSAMENTO ONLINE
414
Viso Geral
415
Viso Geral
Funes no-iterativas
Algumas razes para usar o processamento batch acontecem quando:
um programa executa uma classificao numerosa (sort);
seu programa executado noite sem a interferncia do usurio;
conjuntos de dados seqenciais so criados;
longos relatrios devem ser gerados.
416
Viso Geral
417
Viso Geral
418
Viso Geral
419
Viso Geral
Nomes de link
Descrio
Nomes de Link-OS
Nomes de Link-OS
Primary Input
CMSYNIN
SYSRDR
Object Input
CMOBJIN
SYSIPT
Primary Report
CMPRINT
SYSLST
Additional Reports
CMPRTnn
SYS041
Work Files
CMWKFnn
420
SYS001SYS032
Viso Geral
Funo
Valor
INTENS
1-10
IM
F/D
PS
Tamanho da pgina
LS
Tamanho da linha
35-250
MT
No limit
MAXCL
No limit
MADIO*
No limit
5-250
Sintaxe
DEFINE WORK FILE n operand1 [TYPE operand2]
Definio
usada para atribuir um nome a um arquivo de trabalho Natural. Isso
permite que voc construa ou altere as definies de um arquivo
dinamicamente dentro da sesso. Quando essa instruo for executada
e o arquivo j estiver aberto, ela provocar, implicitamente, o
fechamento do arquivo. Ele possui um nmero que o identifica. Esse
nmero varia de 1 at 32.
422
Sintaxe
WRITE WORK [FILE] work-file-number [VARIABLE] operand1...
Definio
usada para gravar registros na seqncia fsica num arquivo. Em ambientes
mainframe s pode ser usada em modo batch sob COM-PLETE, TSO, CMS e
TIAM. possvel gravar registros com diferentes campos no mesmo work file
usando diferentes instrues WRITE WORK FILE. Nesse caso, a varivel de
entrada deve ser definida em todas as instrues WRITE WORK FILE.
423
Sintaxe
READ WORK [FILE] work-file-number [ONCE]
RECORD operand1
[AND] [SELECT]
OFFSET n
FILLER nx operand2 ...
424
Definio
usada para ler dados de um arquivo seqencial no-Adabas. Os dados so
lidos na ordem fsica independente da forma como foram gravados. Em
ambientes mainframe s pode ser usada sob COM-PLETE, TSO, CMS e TIAM
ou em modo batch. Ao ser lido, o JCL deve ser fornecido.
Essa instruo provoca um loop de processamento, assim, os processos que
quebra automtica devem ser executados dentro do loop de leitura. Quando a
condio de fim de arquivo ocorre, o Natural automaticamente fecha o work file.
425
Exemplo
1 redefine #registro
2 #reg
3 cidade (a8)
3 filler 2x
end-read
3 nome (a20)
2 codigo_emp (n3)
1 emp view of employees
2 codigo_emp
.
read work file 1 [once] #registro
move by name #reg to emp
2 nome
2 cidade
APNDICE A
Editores do Mainframe
- Editor de Programa
- Editor da rea de Dados
- Editor de Mapa
427
EDITOR DO MAINFRAME
Editor de Programa
Para entrar no editor de programa do mainframe basta
selecionar a opo Create -> Object no menu principal e
depois informar o tipo e o nome do objeto. Uma outra
alternativa e entrar com o comando e (editing) p (program)
na linha de comando.
428
EDITOR DO MAINFRAME
19:55:30
*****
User CTDPS
- Development Functions -
Code
C
E
R
D
X
L
S
?
.
Code .. c
NATURAL
*****
2003-02-26
Library SYSTEM
Mode Reporting
Work area empty
Function
Create Object
Edit Object
Rename Object
Delete Object
Execute Program
List Object(s)
List Subroutines Used
Help
Exit
Type .. p
Name .. prog1___________________________
Command ===>
Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help Menu Exit
Canc
429
EDITOR DO MAINFRAME
Comandos de linha
Marcar linhas .X, .Y;
Copiar linhas
Mover linhas
Inserir linhas
EDITOR DO MAINFRAME
Comandos Adicionais
ADD - Adiciona linhas em branco no fim ou no incio do
programa;
CLEAR - Limpa a rea de trabalho-fonte;
DELETE - Permite ao usurio escolher entre excluir o
cdigo-fonte, o cdigo-objeto ou ambos;
PURGE - Exclui o cdigo-fonte do programa;
SCRATCH - Exclui o cdigo objeto do programa;
LAST - Mostra os ltimos comandos emitidos com a
possibilidade de reexecuo.
431
EDITOR DO MAINFRAME
Comandos Adicionais
RENAME - Usado para dar um novo nome ao objeto;
LIST VIEW - Emite uma lista com os diversos tipos de
objetos. Quando apenas um objeto especificado, o
comando listar o contedo desse objeto;
SET TYPE - Troca o tipo de objeto Natural;
RENUMBER - Usado para renumerar as linhas do
programa-fonte;
STRUCT - Gera o fonte tabulado na rea de trabalho;
432
EDITOR DO MAINFRAME
Subcomandos do Editor
Excluir um conjunto de linhas:
DX, DY, DX-Y;
EX, EY, EX-Y.
Obter mais linhas para o programa:
ADD.
Cancelar as marcas X e Y:
RESET.
433
EDITOR DO MAINFRAME
Subcomandos do Editor
Renumerar o programa:
N.
Exibir/Repetir ltimo comando:
* ou *=.
Subcomandos de posio:
T, --; B, ++; +P, -P, +, -; +h, -H; +nnnn, -nnnn; nnnn;
X, Y.
434
EDITOR DO MAINFRAME
435
EDITOR DO MAINFRAME
436
EDITOR DO MAINFRAME
20:23:58
User CTDPS
Code
C
E
R
D
X
L
S
?
.
Code .. c
2003-02-26
Library SYSTEM
Mode Reporting
Work area empty
Function
Create Object
Edit Object
Rename Object
Delete Object
Execute Program
List Object(s)
List Subroutines Used
Help
Exit
Type .. l
Name .. local1__________________________
Command ===>
Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help Menu Exit
Canc
437
EDITOR DO MAINFRAME
Informao
Coluna
E=erro detectado
I=valores de inicializao definido
M=mscara de edio definida
S=mscara de edio e valores de inicializao definidos
438
EDITOR DO MAINFRAME
Informao
Coluna
Tipo de campo (type):
branco= campo elementar
G= campo grupo
P= campo grupo peridico
T
M= campo mltiplo
*= linha de comentrio
V= viso dos dados
C= constante
B= bloco de dados
R= campo redefinido
439
EDITOR DO MAINFRAME
Coluna
L
Name
Informao
F
Length
Formato do campo.
Tamanho do campo. No preencher para formatos C, D, T e L.
Index/Init/EM
Name/
Comment
tabelas (2,2).
440
EDITOR DO MAINFRAME
441
EDITOR DO MAINFRAME
Local
LLL
Library DIANA
DBID
23 FNR
231
View EMPLOYEES
I T L Name
F Leng Index/Init/EM/Name/Comment
------------------------------------------------------------------------------X
2 PERSONNEL-ID
A
8
G 2 FULL-NAME
X
3 FIRST-NAME
A
20
3 MIDDLE-I
A
1
X
3 NAME
A
20
2 MIDDLE-NAME
A
20
X
2 MAR-STAT
A
1
2 SEX
A
1
2 BIRTH
A
6
G 2 FULL-ADDRESS
M 3 ADDRESS-LINE
A
20 (1:191) /* MU-FIELD
X
3 CITY
A
20
3 ZIP
A
10
3 POST-CODE
A
10
X
3 COUNTRY
A
3
G 2 TELEPHONE
3 AREA-CODE
A
6
442
EDITOR DO MAINFRAME
Local
LLL
Library DIANA
Command
I T L Name
All - -------------------------------V 1 EMPL
2 PERSONNEL-ID
2 FIRST-NAME
2 NAME
2 MAR-STAT
2 CITY
2 COUNTRY
443
DBID
23 FNR
231
> +
F Leng Index/Init/EM/Name/Comment
- ---- --------------------------------EMPLOYEES
A
8
A
20
A
20 /* VALIDO SOMENTE NOMES PORTUGUE
A
1
A
20 /* CIDADES DE SAO PAULO
A
3
EDITOR DO MAINFRAME
444
DBID
23 FNR
231
> +
F Leng Index/Init/EM/Name/Comment
- ---- --------------------------------EMPLOYEES
A
8
A
20
A
20
A
20
A
25
P 9.0 (1:3)
P 9.0 (1:3,1:2)
EDITOR DO MAINFRAME
Local
DIALDA1
Library DIANA
Command
I T L Name
All - -------------------------------V 1 EMPL
2 PERSONNEL-ID
2 FIRST-NAME
2 NAME
R 2 NAME
3 #LETRA-INICIAL
2 CITY
2 JOB-TITLE
2 SALARY
M 2 BONUS
0010
0020
0030
0040
0050
0060
0070
DBID
231
> +
F Leng Index/Init/EM/Name/Comment
- ---- --------------------------------EMPLOYEES
A
8
A
20
A
20
/* REDEF. BEGIN : NAME
A
1 /* LETRA INICIAL DO SOBRENOME
A
20
A
25
P 9.0 (1:3)
P 9.0 (1:3,1:2)
DEFINE DATA
LOCAL USING DIALDA1
END-DEFINE
READ (10) EMPL
DISPLAY PERSONNEL-ID NAME CITY #LETRA-INICIAL
END-READ
END
445
23 FNR
EDITOR DO MAINFRAME
Editor de Mapa
Para entrar no editor de mapa do mainframe basta
selecionar a opo Create -> Object no menu principal e
depois informar o tipo de objeto m e o nome do objeto.
Uma outra alternativa e entrar com o comando e (editing) m
(map) na linha de comando. Voc ser direcionado para o
editor de mapa.
446
EDITOR DO MAINFRAME
20:23:58
User CTDPS
Code
C
E
R
D
X
L
S
?
.
Code .. c
2003-02-26
Library SYSTEM
Mode Reporting
Work area empty
Function
Create Object
Edit Object
Rename Object
Delete Object
Execute Program
List Object(s)
List Subroutines Used
Help
Exit
Type .. m
Name .. xxxmap1__________________________
Command ===>
Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help Menu Exit
Canc
447
EDITOR DO MAINFRAME
17:25:27
User CTDPS
Code .. I
2003-03-05
Library SYSTEM
Function
--------------------------------Field and Variable Definitions
Edit Map
Initialize new Map
Initialize a new Help Map
Maintenance of Profiles & Devices
Save Map
Test Map
Stow Map
Help
Exit
Name .. XXXMAP1_
Profile .. SYSPROF_
Command ===>
Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help
Exit Test Edit
448
EDITOR DO MAINFRAME
449
EDITOR DO MAINFRAME
17:28:20
Delimiters
----------------Cls Att CD Del
T
D
BLANK
T
I
?
A
D
_
A
I
)
A
N
^
M
D
&
M
I
:
O
D
+
O
I
(
Format
--------------------------Page Size ...... 23
Line Size ...... 79
Column Shift ... 0 (0/1)
Layout ......... ________
dynamic ....... N (Y/N)
Zero Print ..... N (Y/N)
Case Default ... UC (UC/LC)
Manual Skip .... N (Y/N)
Decimal Char ... .
Standard Keys .. N (Y/N)
Justification .. L (L/R)
Print Mode ..... __
Control Var .... ________
2003-03-05
Context
-------------------------Device Check .... 4880
WRITE Statement
_
INPUT Statement
X
Help ____________________
as field default N (Y/N)
Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help
Exit
Let
450
EDITOR DO MAINFRAME
451
EDITOR DO MAINFRAME
EDITOR DO MAINFRAME
Definindo os campos
Ob _
.
.
.
.
.
.
001
matricula:
nome:
idade:
n.o inscr:
)x(20)
)x(20)
)9(2)
)0(5)
453
EDITOR DO MAINFRAME
Aps o ENTER
Ob _
.
.
.
.
.
.
001
matricula:
nome:
idade:
n.o inscr:
)XXXXXXXXXXXXXXXXXXXX
)XXXXXXXXXXXXXXXXXXXX
)99
)00000
454
EDITOR DO MAINFRAME
2003-03-05
2003-03-05
EDITOR DO MAINFRAME
456
EDITOR DO MAINFRAME
18:06:22
User CTDPS
Code .. W
2003-03-05
Library SYSTEM
Function
--------------------------------Field and Variable Definitions
Edit Map
Initialize new Map
Initialize a new Help Map
Maintenance of Profiles & Devices
Save Map
Test Map
Stow Map
Help
Exit
Name .. XXXMAP1_
Profile .. SYSPROF_
Command ===>
Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help
Exit Test Edit
STOW command executed successfully.
457
EDITOR DO MAINFRAME
Testando o mapa
Voc poder testar o mapa diretamente na tela do editor de
mapa com a opo PF4, saindo da tela de edio com PF3 e
escolhendo a opo T (Test Map) no menu da tela Natural
Map Editor ou chamando o mapa a partir de um programa
atravs da instruo INPUT USING MAP <nome-do-mapa>.
matricula:
nome:
idade:
n.o inscr:
458
____________________
____________________
__
_____
EDITOR DO MAINFRAME
EDITOR DO MAINFRAME
Ob P XXXPG1
Ob D CLS ATT DEL
CLS ATT DEL
. EMP
*V1
.
T D
Blnk
T I
?
1 NAME
A20
.
A D
_
A I
)
2 CITY
A20
.
A N
^
M D
&
3 SALARY
P9.0 .
M I
:
O D
+
4 PERSONNEL-ID
A8
.
O I
(
.
.
001
--010---+----+----+---030---+----+----+---050---+----+----+---070---+---MENU PRINCIPAL
IDENTIFICACAO:)4
NOME:)1
SALARIO:)3
460
EDITOR DO MAINFRAME
Aps o ENTER
Ob P XXXPG1
Ob D CLS ATT DEL
CLS ATT DEL
. EMP
*V1
.
T D
Blnk
T I
?
1 NAME
A20
.
A D
_
A I
)
2 CITY
A20
.
A N
^
M D
&
3 SALARY
P9.0 .
M I
:
O D
+
4 PERSONNEL-ID
A8
.
O I
(
.
.
001
--010---+----+----+---030---+----+----+---050---+----+----+---070---+---MENU PRINCIPAL
IDENTIFICACAO:)XXXXXXXX
NOME:)XXXXXXXXXXXXXXXXXXXX
SALARIO:)999999999
461
EDITOR DO MAINFRAME
EDITOR DO MAINFRAME
Comandos de linha:
..M, ..Mn, ..M* - move linha(s) para a posio do cursor;
..R, ..Rn - repete linha(s) na posio do cursor;
..C, ..Cn, ..C* - centraliza linha(s);
..D, ..Dn, ..D* - exclui linha(s);
..I, ..In, ..I* - insere linha(s) em branco;
..Fc - preenche espaos vazios na linha com o caracter c;
..S, ..Sn - divide a(s) linha(s) na posio do cursor;
..J, ..Jn, ..J* - une linhas.
463
EDITOR DO MAINFRAME
EDITOR DO MAINFRAME
Regras de Processamento
Trata-se de um grupo de instrues anexadas a uma
varivel em um mapa externo. utilizada para realizar a
validao do campo ao qual est associada. Uma regra no
pode conter e instruo END.
465
EDITOR DO MAINFRAME
EDITOR DO MAINFRAME
Ob _
.
.
.
.
.
.
001
IDENTIFICACAO:.pXXXXXXX
NOME:)XXXXXXXXXXXXXXXXXXXX
SALARIO:)99999
467
EDITOR DO MAINFRAME
Mod
U
U
U
468
EDITOR DO MAINFRAME
IDENTIFICACAO: _________
NOME: ____________________
SALARIO: _____
469
EDITOR DO MAINFRAME
470
EDITOR DO MAINFRAME
Name #SALARIO
Upper Bnds 3_____ 1_____ 1_____
------------------------------------------------------------------------------Dimensions
Occurrences
Starting from
Spacing
0 . Index vertical
1__
________
0
Lines
1 . Index horizontal
3__
________
3
Columns
0 . Index (h/v) V
1__
________
0
Cls/Ls
001
--010---+----+----+---030---+----+----+---050---+----+----+---070---+---MENU PRINCIPAL
IDENTIFICACAO:)XXXXXXXX
NOME:)XXXXXXXXXXXXXXXXXXXX
SALARIO:.A9999
471
)99999
)99999
Exerccios
472
SISTEMA DE FUNCIONRIOS
GDA-F (*)
PMENU
MMENU
MHELP
LDA-F (+)
1
PINC
2
*+
PALT
3
*+
PEXC
HRO1
4
*+
PREL *
MHRO1
MIAE
HRO2
473
MHRO2
Exerccios
474
Exerccios
475
Exerccios
476
Exerccios
e) Esquema de programao :
477
Exerccios
stop end-if
Exerccios
479
Exerccios
480
Exerccios
/* encontrou o cdigo
if #opcao = 1 /* incluso
reinput mark *#codigo alarm
end-if
end-if
481
Exerccios
Exerccios
483
Exerccios
484
Exerccios
485
Exerccios
Exerccios
487
Exerccios
Exerccios
Exerccios
Exerccios
491
Exerccios
Exerccios
Exerccios
494
Exerccios
495
Exerccios
Exerccios
497
Exerccios
Trmino do Curso
499