Vous êtes sur la page 1sur 156

EASYTRIEVE

Prof. ALBERTO ROMANO SCHIESARI


(ltima reviso MAI/2001)

Simbologia utilizada neste manual

semelhana do padro utilizado nos manuais IBM, esta apostila utiliza especificaes
conforme indicado a seguir :

| item1 | item2 | item3 | ...


quando colocados entre barras verticais, deve-se optar entre um dos itens

[ item1 ] ....
quando colocado entre colchetes, o uso do(s) item(s) no obrigatrio; colocar somente se
desejado, ou necessrio no caso especfico.

letras minsculas
substituir pelo necessrio / desejado

LETRAS MAISCULAS
colocar igual ao indicado

SUMRIO
1 CONCEITOS BSICOS...........................................................................................................................................5
a) Generalidades...........................................................................................................................................................5
b) Caractersticas de Instalao....................................................................................................................................6
c) Estrutura de um programa em EASYTRIEVE........................................................................................................8
d) PARMs principais ...............................................................................................................................................11
e) Regras gerais para os statements ...........................................................................................................................12
f) Exemplo inicial de um programa em EASY..........................................................................................................13
g) rpidas dicas sobre DISPLAY, FILE, PRINT, REPORT, PUT, STOP................................................................15
2 DECLARAO DE ARQUIVOS..........................................................................................................................16
a) Relatrios...............................................................................................................................................................16
b) Arquivo sequencial, registros tamanho fixo (entrada ou sada) :..........................................................................21
c) Arquivo VSAM KSDS ou RRDS (criao)...........................................................................................................24
d) Arquivo VSAM KSDS ou RRDS (leitura sequencial de arquivo j criado).........................................................26
e) Arquivo VSAM KSDS ou RRDS (com update)....................................................................................................28
f) Arquivo sequencial, registros VBS (sada) :.........................................................................................................33
g) Arquivo sequencial, registros VBS (entrada) :.....................................................................................................35
3 DECLARAO DE DADOS REAS DE I/O ..................................................................................................37
4 DECLARAO DE DADOS REAS DE WORK............................................................................................39
5 VARIVEIS EASYTRIEVE; PEGAR PARM DO EXEC.....................................................................................47
6 Atividade JOB e statements START e FINISH.......................................................................................................51
7 - Comandos de processamento....................................................................................................................................58
a) Comando STOP ....................................................................................................................................................58
b) Expresses e assinalaes (movimentos) ............................................................................................................58
c) Identificao de pontos de programa; comandos GO TO, PROC, END-PROC e PERFORM ............................64
d) Comandos IF, ELSE, ELSE-IF, END-IF ; operadores relacionais ......................................................................68
e) Comandos DO, END-DO e CASE .......................................................................................................................72
8 - Statement REPORT e complementares....................................................................................................................79
a) Comando PRINT...................................................................................................................................................79
b) Statement REPORT...............................................................................................................................................79
c) Statements complementares ao REPORT : resumo...............................................................................................79
d) componentes de um relatrio.................................................................................................................................80
e) estrutura do REPORT............................................................................................................................................81
f) Clusulas do REPORT ..........................................................................................................................................81
g) Statements complementares ao REPORT : detalhes ............................................................................................84
9 - Comandos de I/O ....................................................................................................................................................96
a) Comando DISPLAY .............................................................................................................................................96
b) Comando GET ......................................................................................................................................................96
c) Comando PUT ......................................................................................................................................................96
d) Comando POINT ..................................................................................................................................................97
e) Comando READ ...................................................................................................................................................98
f) Comando WRITE ..................................................................................................................................................98
10 Atividade SORT ..................................................................................................................................................102
11 RECURSO de MATCH ......................................................................................................................................105
12 - Uso de sub-programas (comando CALL) ............................................................................................................108
13 - Tabelas : declarao e referncia no processamento ...........................................................................................111
14 Uso de DB2..........................................................................................................................................................119
15 - Dicas gerais : problemas mais comuns e outros tpicos.......................................................................................138
a) Resultados de acumulao aparentemente errados..............................................................................................138
b) Campos no so totalizados.................................................................................................................................140
c) Uso de TALLY no aceito; TALLY para sumarizar...........................................................................................143
d) Trocar sinal de um campo compactado ou zonado .............................................................................................147
e) Instrues aparentemente executadas erradas .....................................................................................................149
f) Abends na execuo ............................................................................................................................................152

EASYTRIEVE
1 Conceitos bsicos a) Generalidades
g) Arquivos VFM ....................................................................................................................................................153

EASYTRIEVE
1 Conceitos bsicos a) Generalidades

1 CONCEITOS BSICOS
a) Generalidades
EASYTRIEVE uma linguagem de programao, com recursos para acesso a arquivos e bases
de dados, com comandos que trazem bastante facilidade principalmente para a gerao de
relatrios.
O objetivo deste material disponibilizar uma fonte de consulta rpida, sem o objetivo de esgotar
todas as possibilidades oferecidas pelo software. Para a obteno de qualquer informao
adicional ou mais especfica, consultar os manuais do prprio fornecedor.
Os programas elaborados em EASYTRIEVE podem ser executados tanto em modo interpretado
quanto em modo compilado.
A execuo de forma interpretada facilita e agiliza o processo de testes.
A execuo de forma compilada, por ser mais rpida, aconselhvel para execues em regime
de produo.

b) Caractersticas de Instalao
Quando da instalao do EASYTRIEVE, o analista de suporte deve indicar os padres da
instalao.
Esses padres referem-se a diversas caractersticas e opes que controlam o ambiente e o
processamento do EASY.
Algumas dessas opes so especificadas a seguir, com o default usado como referncia, e, em
alguns casos, alguns detalhes adicionais sero vistos no tem PARMs principais.
ABEXIT=SNAP
indica o default no caso de Abend
ACROSS=4
indica quantidade de etiquetas a imprimir numa linha.
Modificvel atravs do LABELS no REPORT
CLIST=NOCLIST
indica se gera ou no CLIST
COMPNME=COMPUTERASSOCIATES, INC.FIELD INSTALLATION
indica o cabealho padro da listagem de compilao.
Nos nossos exemplos ser COMPRADOR EASYTRIEVE
DATE=MMDDYY
indica o formato da data colocada na listagem de compilao e na varivel SYSDATE
DMAP=NODMAP
indica se gera ou no DMAP
DOWN=6
indica quantidade de linhas por etiqueta
Modificvel atravs do LABELS no REPORT
DTLCTL=FIRST
indica o mtodo de impresso do valor dos campos de controle nas linhas de detalhe.
Pode ser EVERY, FIRST ou NONE
FLDCHK=FLDCHK
indica se o EASY deve validar as referncias a campos de arquivos
FLOW=NOFLOW
indica se deve ser impresso o nro do statement executado quando o programa abendar
FLOWSIZ=100
indica a quantidade de entries na tabela usada para o FLOW
LABLSIZ=30
indica o nro de posies a imprimir numa etiqueta
LINESIZ=132
indica o tamanho da linha de impressao.
Modificvel atravs do LINESIZE no REPORT
LIST=(PARM,FILE)
indica se devem ser impressos os parms e as estatsticas dos arquivos
NEWPAGE=NO
indica se deve haver salto de folha a cada etiqueta impressa
NUMERIC=(COMMA,PERIOD)
indica o formato de edio de campos de valor.
O primeiro indica o separador visual e o segundo o separador decimal.

EASYTRIEVE
1 Conceitos Bsicos b Caractersticas da Instalao

PAGESIZ=(58,0)
o primeiro nro indica o tamanho mximo da pgina para os statements LINE
(pode ir de 1 a 32767)
o segundo nro indica o tamanho mximo da pgina para os DISPLAYs
(pode ir de 0 a 32767; zero indica infinito nunca pular de folha)
PAGEWRD=PAGE
indica a literal a usar na indicao do nmero de pgina.
PMAP=NOPMAP
indica se gera ou no um procedure map do programa gerado
SEPDATE=/
indica o carter separador na edio de data do dia
SEPTIME=.
indica o carter separador na edio da hora do dia
SCANCOL=(1,72)
indica as posies inicial e final dos statements
SKIP=0
indica o nmero de linhas em branco antes da impresso da LINE 01
SPACE=3
indica o nmero de espaos que deve haver entre dois campos listados numa linha
SPREAD=NO
indica se os campos da linha devem ser espalhados o mximo possvel
STATE=STATE
indica para o EASY manter registro do nro do statement em execuo
(para uso no FLOW ou em diagnsticos de abend)
SUMCTL=HIAR
indica como deve ser as linhas de total.
Pode ser ALL, HIAR, TAG ou NONE
SUMSPAC=3
indica o nero de posies de impresso adicionais a reservar para a impresso de totais
TALYSIZ=2
indica o tamanho da varivel TALLY
TITLSKP=3
indica o nmero de linhas em branco entre a ltima linha de cabealho de ttulo e a
primeira de cabealho de identificao de campos (ou de detalhe)
XREF=NOXREF
indica se deve ou no ser gerada cross-reference dos nomes

c) Estrutura de um programa em EASYTRIEVE


A estrutura bsica de um programa em EASYTRIEVE composta de statements para :
PARM para indicar condies de processamento ao EASYTRIEVE
declarao de arquivos (opcional)
declarao de variveis (opcional)
declarao dos procedimentos (obrigatrio); os blocos de procedimentos (ATIVIDADES) so
delimitados a cada JOB ou SORT
Um programa com n atividades :
PARM
declarao arquivos
declarao variveis
atividade 1
[atividade 2]
.
.
.
.
.
.
[atividade n]

Um programa com uma atividade (JOB) :


PARM
declarao arquivos
declarao variveis
JOB .....
.
.
.
.
.
.

EASYTRIEVE
1 Conceitos Bsicos c Estrutura de um programa Easytrieve

Um programa com duas atividades (a primeira um SORT e a segunda um JOB) :


PARM
declarao arquivos
declarao variveis
SORT.....
.
.
.
.
JOB...
.
.
.
.
.

Um programa com tres atividades (a primeira um JOB, a segunda um SORT e a terceira outro
JOB) :
PARM
declarao arquivos
declarao variveis
JOB.....
.
.
.
SORT...
.
.
.
.
JOB.....
.
.
.

EASYTRIEVE
1 Conceitos Bsicos c Estrutura de um programa Easytrieve

Um programa com uma atividade e todas as declaraes possveis para um REPORT :


PARM
declarao arquivos
declarao variveis
JOB.....
...
.
*---------------------REPORT
SEQUENCE
CONTROL
SUM
TITLE
HEADING
LINE
*-----------------REPORT-INPUT. PROC
...
END-PROC
*-----------------BEFORE-LINE. PROC
...
END-PROC
*-----------------AFTER-LINE. PROC
...
END-PROC
*-----------------BEFORE-BREAK. PROC
...
END-PROC
*-----------------AFTER-BREAK. PROC
...
END-PROC
*-----------------ENDPAGE. PROC
...
END-PROC
*-----------------TERMINATION. PROC
...
END-PROC
*------------------

10

d) PARMs principais
ABEXIT SNAP = imprime dump formatado para 0C1 a 0CB, e um relatrio de anlise de erro
ABEND NOSNAP = imprime somente um pequeno relatrio de anlise de erro
ABEND NO = no trata abend
BIND ... = para utilizao de DB2
COMPILE = executa check de sintaxe e compilao somente
DEBUG [CLIST|PMAP] [DMAP] [FLDCHK] [FLOW] [FLOWSIZ n] [STATE] [XREF x]

DEBUG CLIST = gera condensed listing do programa executvel gerado


DEBUG PMAP = gera listagem completa do executvel gerado
DEBUG DMAP = gera mapa das reas de dados dos arquivos
DEBUG FLDCHK = testa todas as referncias a campos de dados de arquivos durante a execuo
do programa. Uma referncia considerada invlida se o registro no estiver disponvel
DEBUG FLOW = imprime o nmero de cada statement executado no relatrio de anlise
DEBUG FLOWSIZ n = estabelece nmero de entries na tabela de trace para a opo FLOW,
podendo n variar de 1 a 4096
DEBUG STATE = imprime o nmero do statement que estava sendo executado quando o
programa abendou
DEBUG XREF x = gera uma cross reference com todos os nomes (campos, arquivos, etc...).
Pode ser (x) SHORT (s se o nome foi referenciado) ou LONG (se foi referenciado ou no)
SORT ... = para uso do SORT
LIST FILE = lista estatsticas do uso dos arquivos aps cada JOB ou SORT
LIST PARM = lista os parms aps a operao de check de sintaxe
SINTAX = termina a execuo do EASY aps o check de sintaxe
Exemplo :
PARM ABEXIT SNAP DEBUG (CLIST STATE FLDCHK NOXREF) +
LIST (PARM FILE) PRESIZE
512
+
SORT (DEVICE SYSDA ALTSEQ NO MSG DEFAULT MEMORY MAX

WORK

3)

VFM(

64)

e) Regras gerais para os statements

o padro o statement estar desde a posio 1 at a 80 (pode ser mudado via parmetro
SCANCOL de instalao)
o padro para comentrios o primeiro carter no-branco do statement ser um asterisco (*)
pode haver mais de um statement por linha; para isso, encerrar cada statement com um ponto
para continuar um statement na prxima linha, uma linha deve ter um + ou um - como
ltimo carter no-branco;

o + indica que a continuao na linha seguinte comea a partir do primeiro


carter no-branco;

o - indica que a continuao na linha seguinte comea a partir da primeira


posio;
literais devem ser colocadas entre apstrofes
o uso da vrgula fora de literais opcional, usado somente para efeito de melhor visibilidade
do texto
para qualificao de arquivos, registros e campos, se necessrio, usar dois pontos :
nomes de campos podem ter no mximo 40 caracteres, e podem ter caracteres alfabticos (A
a Z), dgitos (0 a 9), e qualquer carter especial exceto os delimitadores (espao, apstrofe,
ponto, vrgula, abre parnteses, fecha parnteses e dois pontos
nomes de procedimentos e REPORTS no podem ter somente dgitos
para fazer referncia a dados em hexadecimal, usar Xnn...., sendo nn... dgitos
hexadecimais (0 a 9, e A a F)
operadores aritmticos ( + , -, * e / ) devem ter pelo menos um espao antes e um
depois)

f) Exemplo inicial de um programa em EASY.


Programa Exemplo 001
Programa completo
//DS029ZSS JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//*--------------------------------------------------------------//* EXEMPLO 001
//*--------------------------------------------------------------//EZTPA01 EXEC PGM=EZTPA00
//ENTRA
DD *
ALBERTO
198802290000000001
ZIGOMAR
200105300000000010
MAFALDA
200010150000000100
VALDICE
199912230000001000
//SAIDA
DD DSN=&&TEMP,DISP=(NEW,PASS),DCB=(LRECL=500,RECFM=FB)
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSREL
DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 001
********************************************************
PARM DEBUG(PMAP, DMAP)
*-------------------------------------------------* DECLARACAO DE ARQUIVOS E RESPECTIVAS AREAS DE I/O
*-------------------------------------------------FILE SYSREL PRINTER
FILE ENTRA
AL
1 80 A
AL-NOME
1 15 A
AL-DATA
16 08 N
AL-SALDO
24 10 N 2
FILE SAIDA
AG
1 80 A
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WLL
W
7
N
WGG
W
7
N
*-------------------------------------------------* DECLARACAO DE PROCEDIMENTOS
*-------------------------------------------------*------------* ROTINA PRINCIPAL
*------------JOB INPUT ENTRA FINISH ESTATIS
WLL = WLL + 1
PRINT RELAT
AG = AL
PUT SAIDA
WGG = WGG + 1

EASYTRIEVE
1 Conceitos Bsicos f Exemplo inicial de um programa em Easy
GO TO JOB
*------------* ROTINA DE FINALIZACAO
*------------ESTATIS. PROC
DISPLAY '************************************'
DISPLAY 'COPIA OK ! '
DISPLAY '************************************'
DISPLAY WLL '/' ENTRA:RECORD-COUNT ' REGISTROS LIDOS.'
DISPLAY WGG '/' SAIDA:RECORD-COUNT ' REGISTROS GRAVADOS.'
DISPLAY '************************************'
END-PROC
*------------* DECLARACAO DO RELATORIO
*------------REPORT RELAT PRINTER SYSREL NOADJUST
SEQUENCE AL-DATA
CONTROL FINAL
TITLE 1 '
LISTAGEM EXEMPLO'
LINE 1 AL-NOME AL-DATA AL-SALDO
********************************************************
* FIM **************************************************
********************************************************

Para melhor compreenso, veja as sadas em relatrio produzidas pelo programa :


EM SYSREL
18/05/01
AL-NOME
ALBERTO
VALDICE
MAFALDA
ZIGOMAR

PROGRAMA EXEMPLO 001


AL-DATA
19880229
19991223
20001015
20010530

AL-SALDO
,01
10,00
1,00
,10
11,11

EM SYSPRINT
OPTIONS FOR THIS RUN
ABEXIT SNAP DEBUG (CLIST STATE FLDCHK NOXREF) LIST (PARM FILE) PRESIZE
SORT (DEVICE SYSDA ALTSEQ NO MSG DEFAULT MEMORY MAX
WORK
3) VFM(

512
64)

************************************
COPIA OK !
************************************
0000004/
4 REGISTROS LIDOS.
0000004/
4 REGISTROS GRAVADOS.
************************************
FILE STATISTICS - CA-EASYTRIEVE PLUS 6.2 9606-18/05/01-10.53-JSN00026
SYSREL
8
OUTPUT
SAM FIX UNBLK
ASA
ENTRA
4
INPUT
SAM FIX
BLK
SAIDA
4
OUTPUT
SAM FIX
BLK
EZTR001
4
INPUT
VFM FIX
BLK

14

g) rpidas dicas sobre DISPLAY, FILE, PRINT, REPORT, PUT, STOP


Para mais facilmente acompanharmos os exemplos que viro no transcorrer dos prximos
captulos, vejamos a sintaxe bsica de alguns comandos, que sero posteriormente detalhados.
FILE nome-arquivo [

| PRINTER | VS |

Declara um arquivo.
Se for para relatorio, declarar FILE nome-arquivo PRINTER
Se for arquivo em disco sequencial, declarar FILE nome-arquivo.
Se for arquivo em disco VSAM, declarar FILE nome-arquivo VS
DISPLAY

| lit1 | var1 | [ | lit2 | var2 | ] ... [ | litn | varn | ]

Exibe o contedo da(s) varivel(eis) e/ou literal(is) especificada(s).


PUT nome-arquivo [FROM nome-arquivo]

Faz a gravao de um registro lgico num arquivo.


PRINT nome-relatorio

Imprime linha(s) de detalhe, conforme especificado na(s) declarao(es) LINE do REPORT.


REPORT nome-relatorio PRINTER nome-arquivo

Faz a declarao das caractersticas de um relatrio, como por exemplo : linha(s) de cabealho,
linha(s) de detalhe, linha(s) de total, sequencia, etc...
STOP

Termina a execuo da atividade (JOB ou SORT).

2 DECLARAO DE ARQUIVOS
A declarao de um arquivo feita atravs do statement FILE; caso necessrio, a declarao da
rea de I/O referente ao arquivo deve ser colocada imediatamente aps o statement FILE.
Vejamos como dever ser a declarao de um arquivo, em funo de suas caractersticas:
a) Relatrios
FILE nome-do-arquivo PRINTER [DEFER]
DEFER = somente abrir o arquivo quando a primeira operao de I/O for emitida. O padro a
abertura de todos os arquivos no incio da atividade.
Programa Exemplo 002
FILE PRINTER utilizado por comando PRINT
//DS029002 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//*--------------------------------------------------------------//STEPEASY EXEC PGM=EZTPA00
//ENTRA
DD *
ALBERTO
198802290000000001
ZIGOMAR
200105300000000010
MAFALDA
200010150000000100
VALDICE
199912230000001000
//RELAT
DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 002
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS E RESPECTIVAS AREAS DE I/O
*-------------------------------------------------FILE RELAT PRINTER
FILE ENTRA
AL
1 80 A
AL-NOME
1 15 A
AL-DATA
16 08 N
AL-SALDO
24 10 N 2
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WLL
W
7
N
*-------------------------------------------------* DECLARACAO DE PROCEDIMENTOS
*--------------------------------------------------

EASYTRIEVE
2 Declarao de arquivos a) Relatrios
*------------* ROTINA PRINCIPAL
*------------JOB INPUT ENTRA
WLL = WLL + 1
PRINT SYSREL
GO TO JOB
*------------* DECLARACAO DO RELATORIO
*------------REPORT SYSREL PRINTER RELAT NOADJUST
TITLE 1 '
PROGRAMA EXEMPLO 002'
LINE 1 AL-NOME AL-DATA AL-SALDO
********************************************************
* FIM **************************************************
********************************************************
//SAIDAS
DD *
>>>>>>>>>RELAT
128/05/01
PROGRAMA EXEMPLO 002
AL-NOME
AL-DATA
AL-SALDO
0ALBERTO
19880229
,01
ZIGOMAR
20010530
,10
MAFALDA
20001015
1,00
VALDICE
19991223
10,00

Programa Exemplo 003


FILE PRINTER utilizado por comando DISPLAY
//DS029003 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//*--------------------------------------------------------------//STEPEASY EXEC PGM=EZTPA00
//ENTRA
DD *
ALBERTO
198802290000000001
ZIGOMAR
200105300000000010
MAFALDA
200010150000000100
VALDICE
199912230000001000
//RELAT
DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 003
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS E RESPECTIVAS AREAS DE I/O
*-------------------------------------------------FILE RELAT PRINTER
FILE ENTRA
AL
1 80 A
17

EASYTRIEVE
2 Declarao de arquivos a) Relatrios
AL-NOME
1 15 A
AL-DATA
16 08 N
AL-SALDO
24 10 N 2
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WLL
W
7
N
*-------------------------------------------------* DECLARACAO DE PROCEDIMENTOS
*-------------------------------------------------*------------* ROTINA PRINCIPAL
*------------JOB INPUT ENTRA
WLL = WLL + 1
DISPLAY RELAT 'NOME=' AL-NOME
GO TO JOB
********************************************************
* FIM **************************************************
********************************************************
//SAIDAS
DD *
>>>>>>>>>RELAT
NOME=ALBERTO
NOME=ZIGOMAR
NOME=MAFALDA
NOME=VALDICE

Programa Exemplo 004


FILE PRINTER utilizado por comando PRINT e DISPLAY sem SEQUENCE
//DS029004 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//*--------------------------------------------------------------//STEPEASY EXEC PGM=EZTPA00
//ENTRA
DD *
ALBERTO
198802290000000001
ZIGOMAR
200105300000000010
MAFALDA
200010150000000100
VALDICE
199912230000001000
//RELAT
DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 004
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS E RESPECTIVAS AREAS DE I/O
*-------------------------------------------------FILE RELAT PRINTER
FILE ENTRA
AL
1 80 A
AL-NOME
1 15 A
18

EASYTRIEVE
2 Declarao de arquivos a) Relatrios
AL-DATA
16 08 N
AL-SALDO
24 10 N 2
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WLL
W
7
N
*-------------------------------------------------* DECLARACAO DE PROCEDIMENTOS
*-------------------------------------------------*------------* ROTINA PRINCIPAL
*------------JOB INPUT ENTRA
WLL = WLL + 1
DISPLAY RELAT 'NOME=' AL-NOME
PRINT SYSREL
GO TO JOB
*------------* DECLARACAO DO RELATORIO
*------------REPORT SYSREL PRINTER RELAT NOADJUST
TITLE 1 '
PROGRAMA EXEMPLO 004'
LINE 1 AL-NOME AL-DATA AL-SALDO
********************************************************
* FIM **************************************************
********************************************************
//SAIDAS
DD *
>>>>>>>>>RELAT
NOME=ALBERTO
128/05/01
PROGRAMA EXEMPLO 004
AL-NOME
AL-DATA
AL-SALDO
0ALBERTO
19880229
,01
NOME=ZIGOMAR
ZIGOMAR
20010530
,10
NOME=MAFALDA
MAFALDA
20001015
1,00
NOME=VALDICE
VALDICE
19991223
10,00

Programa Exemplo 005


FILE PRINTER utilizado por comando PRINT e DISPLAY com SEQUENCE

//DS029005 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X


//*--------------------------------------------------------------//EZTPA01 EXEC PGM=EZTPA00
//ENTRA
DD *
ALBERTO
198802290000000001
ZIGOMAR
200105300000000010
MAFALDA
200010150000000100
VALDICE
199912230000001000
//RELAT
DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
19

EASYTRIEVE
2 Declarao de arquivos a) Relatrios
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 005
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS E RESPECTIVAS AREAS DE I/O
*-------------------------------------------------FILE RELAT PRINTER
FILE ENTRA
AL
1 80 A
AL-NOME
1 15 A
AL-DATA
16 08 N
AL-SALDO
24 10 N 2
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WLL
W
7
N
*-------------------------------------------------* DECLARACAO DE PROCEDIMENTOS
*-------------------------------------------------*------------* ROTINA PRINCIPAL
*------------JOB INPUT ENTRA
WLL = WLL + 1
DISPLAY RELAT 'NOME=' AL-NOME
PRINT SYSREL
GO TO JOB
*------------* DECLARACAO DO RELATORIO
*------------REPORT SYSREL PRINTER RELAT NOADJUST
SEQUENCE AL-NOME
TITLE 1 '
PROGRAMA EXEMPLO 005'
LINE 1 AL-NOME AL-DATA AL-SALDO
********************************************************
* FIM **************************************************
********************************************************
//SAIDAS
DD *
>>>>>>>>>RELAT
NOME=ALBERTO
NOME=ZIGOMAR
NOME=MAFALDA
NOME=VALDICE
128/05/01
PROGRAMA EXEMPLO 005
AL-NOME
AL-DATA
AL-SALDO
0ALBERTO
19880229
,01
MAFALDA
20001015
1,00
VALDICE
19991223
10,00
ZIGOMAR
20010530
,10

20

b) Arquivo sequencial, registros tamanho fixo (entrada ou sada) :


FILE nome-do-arquivo [DEFER]
[rea de I/O]
DEFER = somente abrir o arquivo quando a primeira operao de I/O for emitida. O padro a
abertura de todos os arquivos no incio da atividade.
Exemplo 006
Cpia DE arquivo SAM PARA arquivo SAM sem rea de I/O
//DS029006 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//*--------------------------------------------------------------//EZTPA01 EXEC PGM=EZTPA00
//ENTRA
DD *
ALBERTO
198802290000000001
ZIGOMAR
200105300000000010
MAFALDA
200010150000000100
VALDICE
199912230000001000
//SAIDA
DD DSN=&&TEMP,DISP=(NEW,PASS),DCB=(LRECL=500,RECFM=FB)
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 006
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS (AREAS DE I/O NAO NECESSARIAS)
*-------------------------------------------------FILE ENTRA
FILE SAIDA
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WLL
W
7
N
WGG
W
7
N
*-------------------------------------------------* DECLARACAO DE PROCEDIMENTOS
*-------------------------------------------------*------------* ROTINA PRINCIPAL
*------------JOB INPUT ENTRA FINISH ESTATIS
WLL = WLL + 1
PUT SAIDA FROM ENTRA
WGG = WGG + 1
GO TO JOB
*------------* ROTINA DE FINALIZACAO
*-------------

EASYTRIEVE
2 Declarao de arquivos b) Arquivo Sam reg.fixo E ou S
ESTATIS. PROC
DISPLAY '************************************'
DISPLAY 'COPIA OK ! '
DISPLAY '************************************'
DISPLAY WLL '/' ENTRA:RECORD-COUNT ' REGISTROS LIDOS.'
DISPLAY WGG '/' SAIDA:RECORD-COUNT ' REGISTROS GRAVADOS.'
DISPLAY '************************************'
END-PROC
********************************************************
* FIM **************************************************
********************************************************
//SAIDAS
DD *
************************************
COPIA OK !
************************************
0000004/
4 REGISTROS LIDOS.
0000004/
4 REGISTROS GRAVADOS.
************************************
128/05/01 17.55.56
CA-EASYTRIEVE PLUS-6.2 9606
COMPRADOR EASYTRIEVE
0PROGRAMS AND ALL SUPPORTING MATERIALS COPYRIGHT (C) 1982, 1996 BY COMPUTER
-FILE STATISTICS - CA-EASYTRIEVE PLUS 6.2 9606-28/05/01-17.55-JSN00020
ENTRA
4
INPUT
SAM FIX
BLK
80
SAIDA
4
OUTPUT
SAM FIX
BLK
500

Exemplo 007
Cpia DE arquivo SAM PARA arquivo SAM com rea de I/O
//DS029007 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//*--------------------------------------------------------------//STEPEASY EXEC PGM=EZTPA00
//ENTRA
DD *
ALBERTO
198802290000000001
ZIGOMAR
200105300000000010
MAFALDA
200010150000000100
VALDICE
199912230000001000
//SAIDA
DD DSN=&&TEMP,DISP=(NEW,PASS),DCB=(LRECL=500,RECFM=FB)
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 006
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS (AREAS DE I/O NAO NECESSARIAS)
*-------------------------------------------------FILE ENTRA
AL
1 80 A
FILE SAIDA
AG
1 80 A
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
22

EASYTRIEVE
2 Declarao de arquivos b) Arquivo Sam reg.fixo E ou S
*-------------------------------------------------WLL
W
7
N
WGG
W
7
N
*-------------------------------------------------* DECLARACAO DE PROCEDIMENTOS
*-------------------------------------------------*------------* ROTINA PRINCIPAL
*------------JOB INPUT ENTRA FINISH ESTATIS
WLL = WLL + 1
AL = AG
PUT SAIDA FROM ENTRA
WGG = WGG + 1
GO TO JOB
*------------* ROTINA DE FINALIZACAO
*------------ESTATIS. PROC
DISPLAY '************************************'
DISPLAY 'COPIA OK ! '
DISPLAY '************************************'
DISPLAY WLL '/' ENTRA:RECORD-COUNT ' REGISTROS LIDOS.'
DISPLAY WGG '/' SAIDA:RECORD-COUNT ' REGISTROS GRAVADOS.'
DISPLAY '************************************'
END-PROC
********************************************************
* FIM **************************************************
********************************************************
//SAIDAS
DD *
************************************
COPIA OK !
************************************
0000004/
4 REGISTROS LIDOS.
0000004/
4 REGISTROS GRAVADOS.
************************************
128/05/01 17.59.13
CA-EASYTRIEVE PLUS-6.2 9606
COMPRADOR EASYTRIEVE
0PROGRAMS AND ALL SUPPORTING MATERIALS COPYRIGHT (C) 1982, 1996 BY COMPUTER
-FILE STATISTICS - CA-EASYTRIEVE PLUS 6.2 9606-28/05/01-17.59-JSN00022
ENTRA
4
INPUT
SAM FIX
BLK
80
SAIDA
4
OUTPUT
SAM FIX
BLK
500

23

c) Arquivo VSAM KSDS ou RRDS (criao)


FILE nome-do-arquivo VS CREATE [RESET] [NOVERIFY] [DEFER]
[rea de I/O]
CREATE = indica a carga inicial de um arquivo VSAM
RESET = indica que um arquivo j anteriormente carregado vai ser carregado novamente . O
arquivo deve ter sido definido via IDCAMS com o atributo REUSE.
NOVERIFY = indica que o erro 116(X74) deve ser ignorado. Este erro ocorre quando o
arquivo no foi devidamente fechado pelo programa que o utilizou anteriormente. Em geral, s
utilizado para emergncias.
DEFER = somente abrir o arquivo quando a primeira operao de I/O for emitida. O padro a
abertura de todos os arquivos no incio da atividade.
Exemplo 008
Cpia DE arquivo SAM PARA arquivo KSDS (sendo criado)
//DS029008 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//* ----------------------------------------------------------//* DELDEF ARQUIVO VSAM
//* ----------------------------------------------------------//DELDEF
EXEC PGM=IDCAMS
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSIN
DD *
DELETE (DV.#029.KL.EZTVSAM) PURGE
SET MAXCC = 0
DEFINE CLUSTER
(NAME(DV.#029.KL.EZTVSAM)
VOLUMES(DDS500)
INDEXED
TO (2001365)
KEYS (15 00)
SHR(2 3)
NOIMBED
SPEED
REUSE)
DATA
(NAME(DV.#029.KL.EZTVSAM.DATA)
RECORDSIZE(0080 0080)
RECORDS(100 100)
CONTROLINTERVALSIZE(4096))
INDEX (NAME(DV.#029.KL.EZTVSAM.INDEX))
//*--------------------------------------------------------------//STEPEASY EXEC PGM=EZTPA00
//* OBSERVAR QUE OS DADOS DEVEM ESTAR CLASSIFICADOS PELA CHAVE
//ENTRA
DD *
ALBERTO
198802290000000001
MAFALDA
200010150000000100
VALDICE
199912230000001000
ZIGOMAR
200105300000000010
//SAIDA
DD DSN=DV.#029.KL.EZTVSAM,DISP=SHR
//SYSOUT
DD SYSOUT=*

EASYTRIEVE
2 Declarao de arquivos c) Arquivo Vsam, criao
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 008
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS (AREAS DE I/O NAO NECESSARIAS)
*-------------------------------------------------FILE ENTRA
FILE SAIDA VS CREATE
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WLL
W
7
N
WGG
W
7
N
*-------------------------------------------------* DECLARACAO DE PROCEDIMENTOS
*-------------------------------------------------*------------* ROTINA PRINCIPAL
*------------JOB INPUT ENTRA FINISH ESTATIS
WLL = WLL + 1
PUT SAIDA FROM ENTRA
WGG = WGG + 1
GO TO JOB
*------------* ROTINA DE FINALIZACAO
*------------ESTATIS. PROC
DISPLAY '************************************'
DISPLAY 'COPIA OK ! '
DISPLAY '************************************'
DISPLAY WLL '/' ENTRA:RECORD-COUNT ' REGISTROS LIDOS.'
DISPLAY WGG '/' SAIDA:RECORD-COUNT ' REGISTROS GRAVADOS.'
DISPLAY '************************************'
END-PROC
********************************************************
* FIM **************************************************
********************************************************
//SAIDAS
DD *
************************************
COPIA OK !
************************************
0000004/
4 REGISTROS LIDOS.
0000004/
4 REGISTROS GRAVADOS.
************************************
128/05/01 18.02.33
CA-EASYTRIEVE PLUS-6.2 9606
COMPRADOR EASYTRIEVE
0PROGRAMS AND ALL SUPPORTING MATERIALS COPYRIGHT (C) 1982, 1996 BY COMPUTER
-FILE STATISTICS - CA-EASYTRIEVE PLUS 6.2 9606-28/05/01-18.02-JSN00020
ENTRA
4
INPUT
SAM FIX
BLK
80
SAIDA
4
OUTPUT
VSAM
UNDEF
80
25

d) Arquivo VSAM KSDS ou RRDS (leitura sequencial de arquivo j criado)


FILE nome-do-arquivo VS [NOVERIFY] [DEFER]
[rea de I/O]
NOVERIFY = indica que o erro 116(X74) deve ser ignorado. Este erro ocorre quando o
arquivo no foi devidamente fechado pelo programa que o utilizou anteriormente. Em geral, s
utilizado para emergncias.
DEFER = somente abrir o arquivo quando a primeira operao de I/O for emitida. O padro a
abertura de todos os arquivos no incio da atividade.
Exemplo 009
Cpia DE arquivo KSDS (obviamente j criado) PARA arquivo SAM
//DS029009 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//STEPEASY EXEC PGM=EZTPA00
//ENTRA
DD DSN=DV.#029.KL.EZTVSAM,DISP=SHR
//SAIDA
DD DSN=&&SAIDA,DISP=(NEW,PASS),DCB=(LRECL=80,RECFM=FB)
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 009
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS (AREAS DE I/O NAO NECESSARIAS)
*-------------------------------------------------FILE ENTRA VS
FILE SAIDA
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WLL
W
7
N
WGG
W
7
N
*-------------------------------------------------* DECLARACAO DE PROCEDIMENTOS
*-------------------------------------------------*------------* ROTINA PRINCIPAL
*------------JOB INPUT ENTRA FINISH ESTATIS
WLL = WLL + 1
PUT SAIDA FROM ENTRA
WGG = WGG + 1
GO TO JOB
*------------* ROTINA DE FINALIZACAO
*------------ESTATIS. PROC
DISPLAY '************************************'

EASYTRIEVE
2 Declarao de arquivos d) Arquivo Vsam, leitura sequencial
DISPLAY 'COPIA OK ! '
DISPLAY '************************************'
DISPLAY WLL '/' ENTRA:RECORD-COUNT ' REGISTROS LIDOS.'
DISPLAY WGG '/' SAIDA:RECORD-COUNT ' REGISTROS GRAVADOS.'
DISPLAY '************************************'
END-PROC
********************************************************
* FIM **************************************************
********************************************************
//SAIDAS
DD *
************************************
COPIA OK !
************************************
0000004/
4 REGISTROS LIDOS.
0000004/
4 REGISTROS GRAVADOS.
************************************
128/05/01 18.10.20
CA-EASYTRIEVE PLUS-6.2 9606
COMPRADOR EASYTRIEVE
0PROGRAMS AND ALL SUPPORTING MATERIALS COPYRIGHT (C) 1982, 1996 BY COMPUTER
-FILE STATISTICS - CA-EASYTRIEVE PLUS 6.2 9606-28/05/01-18.10-JSN00020
ENTRA
4
INPUT
VSAM
UNDEF
80
SAIDA
4
OUTPUT
SAM FIX
BLK
80

27

e) Arquivo VSAM KSDS ou RRDS (com update)


FILE nome-do-arquivo VS UPDATE [NOVERIFY] [DEFER]
[rea de I/O]
UPDATE = indica que o arquivo sofrer atualizao in-place (comando WRITE)
NOVERIFY = indica que o erro 116(X74) deve ser ignorado. Este erro ocorre quando o
arquivo no foi devidamente fechado pelo programa que o utilizou anteriormente. Em geral, s
utilizado para emergncias.
DEFER = somente abrir o arquivo quando a primeira operao de I/O for emitida. O padro a
abertura de todos os arquivos no incio da atividade.
Exemplo 010
Cpia DE arquivo SAM PARA arquivo KSDS (update = adicionar registros)
//DS029010 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//* ----------------------------------------------------------//STEPEASY EXEC PGM=EZTPA00
//ENTRA
DD *
BARTIRA
198802290000000001
TIQUINHA
200010150000000100
//SAIDA
DD DSN=DV.#029.KL.EZTVSAM,DISP=SHR
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 010
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS (AREAS DE I/O NAO NECESSARIAS)
*-------------------------------------------------FILE ENTRA
FILE SAIDA VS UPDATE
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WLL
W
7
N
WGG
W
7
N
*-------------------------------------------------* DECLARACAO DE PROCEDIMENTOS
*-------------------------------------------------*------------* ROTINA PRINCIPAL
*------------JOB INPUT ENTRA FINISH ESTATIS
WLL = WLL + 1
PUT SAIDA FROM ENTRA
WGG = WGG + 1
GO TO JOB

EASYTRIEVE
2 Declarao de arquivos e) Arquivo Vsam, update (criao)
*------------* ROTINA DE FINALIZACAO
*------------ESTATIS. PROC
DISPLAY '************************************'
DISPLAY 'COPIA OK ! '
DISPLAY '************************************'
DISPLAY WLL '/' ENTRA:RECORD-COUNT ' REGISTROS LIDOS.'
DISPLAY WGG '/' SAIDA:RECORD-COUNT ' REGISTROS GRAVADOS.'
DISPLAY '************************************'
END-PROC
********************************************************
* FIM **************************************************
********************************************************
//SAIDAS
DD *
************************************
COPIA OK !
************************************
0000002/
2 REGISTROS LIDOS.
0000002/
2 REGISTROS GRAVADOS.
************************************
128/05/01 18.11.42
CA-EASYTRIEVE PLUS-6.2 9606
COMPRADOR EASYTRIEVE
0PROGRAMS AND ALL SUPPORTING MATERIALS COPYRIGHT (C) 1982, 1996 BY COMPUTER
-FILE STATISTICS - CA-EASYTRIEVE PLUS 6.2 9606-28/05/01-18.11-JSN00020
ENTRA
2
INPUT
SAM FIX
BLK
80
SAIDA
2
OUTPUT
VSAM
UNDEF
80

29

Exemplo 011
Update in-place de registro(s) em um KSDS j criado
//DS029011 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//STEPEASY EXEC PGM=EZTPA00
//ENTRASAI DD DSN=DV.#029.KL.EZTVSAM,DISP=SHR
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 011
********************************************************
FILE ENTRASAI VS UPDATE
AL-NOME
1 15 A
AL-VALOR
24 10 N 2
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WLL
W
7
N
WUU
W
7
N
*-------------------------------------------------* DECLARACAO DE PROCEDIMENTOS
*-------------------------------------------------JOB INPUT ENTRASAI FINISH ESTATIS
WLL = WLL + 1
IF AL-NOME EQ 'ALBERTO'
AL-VALOR = 1111.22
WRITE ENTRASAI UPDATE
WUU = WUU + 1
END-IF
GO TO JOB
*------------* ROTINA DE FINALIZACAO
*------------ESTATIS. PROC
DISPLAY WLL ' REGISTROS LIDOS.'
DISPLAY WUU ' REGISTROS ATUALIZADOS'
END-PROC
********************************************************
* FIM **************************************************
********************************************************
//SAIDAS
DD *
0000006 REGISTROS LIDOS.
0000001 REGISTROS ATUALIZADOS
129/05/01 9.27.37
CA-EASYTRIEVE PLUS-6.2 9606
COMPRADOR EASYTRIEVE
0PROGRAMS AND ALL SUPPORTING MATERIALS COPYRIGHT (C) 1982, 1996 BY COMPUTER
-FILE STATISTICS - CA-EASYTRIEVE PLUS 6.2 9606-29/05/01- 9.27-JSN00021
ENTRASAI
6
UPDATE
VSAM
UNDEF
80

EASYTRIEVE
2 Declarao de arquivos e) Arquivo Vsam, update (in-place)

31

Exemplo 012
Excluso (delete) de registro(s) em um KSDS j criado
//DS029012 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//* ----------------------------------------------------------//STEPEASY EXEC PGM=EZTPA00
//ENTRASAI DD DSN=DV.#029.KL.EZTVSAM,DISP=SHR
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 012
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS
*-------------------------------------------------FILE ENTRASAI VS UPDATE
AL-NOME
1 15 A
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WLL
W
7
N
WEX
W
7
N
*-------------------------------------------------* DECLARACAO DE PROCEDIMENTOS
*-------------------------------------------------JOB INPUT ENTRASAI FINISH ESTATIS
WLL = WLL + 1
IF AL-NOME EQ 'ALBERTO'
WRITE ENTRASAI DELETE
WEX = WEX + 1
END-IF
GO TO JOB
*------------* ROTINA DE FINALIZACAO
*------------ESTATIS. PROC
DISPLAY WLL ' REGISTROS LIDOS.'
DISPLAY WEX ' REGISTROS EXCLUIDOS'
END-PROC
********************************************************
* FIM **************************************************
********************************************************
//SAIDAS
DD *
0000006 REGISTROS LIDOS.
0000001 REGISTROS EXCLUIDOS
129/05/01 9.29.28
CA-EASYTRIEVE PLUS-6.2 9606
COMPRADOR EASYTRIEVE
0PROGRAMS AND ALL SUPPORTING MATERIALS COPYRIGHT (C) 1982, 1996 BY COMPUTER
-FILE STATISTICS - CA-EASYTRIEVE PLUS 6.2 9606-29/05/01- 9.29-JSN00020
ENTRASAI
6
UPDATE
VSAM
UNDEF
80

EASYTRIEVE
2 Declarao de arquivos e) Arquivo Vsam, update (delete)

f) Arquivo sequencial, registros VBS (sada) :


FILE nome-do-arquivo VBS max-lrecl [max-blksize] [FULLTRK] [DEFER]

[rea de I/O]
max-lrecl = literal que indica o tamanho mximo de um registro lgico
max-blksize = literal que indica o tamanho mximo de um bloco
FULLTRK = o tamanho do bloco de sada deve ser o mximo que a capacidade da trilha
permitir.
DEFER = somente abrir o arquivo quando a primeira operao de I/O for emitida. O padro a
abertura de todos os arquivos no incio da atividade.
Exemplo 013
Gerao de arquivo VBS
//DS029013 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//*--------------------------------------------------------------//* GERA VARIAVEL
//*--------------------------------------------------------------//EZTPA01 EXEC PGM=EZTPA00
//SAIDA
DD DSN=DS.#029.KL.PSVB,DISP=(NEW,CATLG),
//
SPACE=(TRK,(5,1),RLSE),UNIT=3390,
//
DCB=(LRECL=6675,RECFM=VB)
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 013
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS E RESPECTIVAS AREAS DE I/O
*-------------------------------------------------FILE SAIDA
AG
1 4000 A
AGX5
1 5 A
AGX6
1 6 A
AGX7
1 7 A
AGX8
1 8 A
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WLL
W
7
N
WGG
W
7
N
*-------------------------------------------------* DECLARACAO DE PROCEDIMENTOS
*-------------------------------------------------*------------* ROTINA PRINCIPAL

EASYTRIEVE
2 Declarao de arquivos e) Arquivo Vsam, update (delete)
*------------JOB INPUT NULL FINISH ESTATIS
MOVE '*' TO AG FILL '*'
SAIDA:RECORD-LENGTH = 5
DISPLAY SAIDA:RECORD-LENGTH '/' AGX5 '/'
PUT SAIDA
WGG = WGG + 1
SAIDA:RECORD-LENGTH = 6
DISPLAY SAIDA:RECORD-LENGTH '/' AGX6 '/'
PUT SAIDA
WGG = WGG + 1
SAIDA:RECORD-LENGTH = 7
DISPLAY SAIDA:RECORD-LENGTH '/' AGX7 '/'
PUT SAIDA
WGG = WGG + 1
SAIDA:RECORD-LENGTH = 8
DISPLAY SAIDA:RECORD-LENGTH '/' AGX8 '/'
PUT SAIDA
WGG = WGG + 1
STOP
ESTATIS. PROC
*------------* ROTINA DE FINALIZACAO
*------------DISPLAY '************************************'
DISPLAY WGG '/' SAIDA:RECORD-COUNT ' REGISTROS GRAVADOS.'
DISPLAY '************************************'
END-PROC
********************************************************
* FIM **************************************************
********************************************************
//SAIDAS DD *
5 /*****/
6 /******/
7 /*******/
8 /********/
************************************
0000004/
4 REGISTROS GRAVADOS.
************************************
129/05/01 9.31.01
CA-EASYTRIEVE PLUS-6.2 9606
COMPRADOR EASYTRIEVE
0PROGRAMS AND ALL SUPPORTING MATERIALS COPYRIGHT (C) 1982, 1996 BY COMPUTER
-FILE STATISTICS - CA-EASYTRIEVE PLUS 6.2 9606-29/05/01- 9.31-JSN00024
SAIDA
4
OUTPUT
SAM VAR
BLK
6675

g) Arquivo sequencial, registros VBS (entrada) :


FILE nome-do-arquivo VBS max-lrecl [max-blksize] [FULLTRK] [DEFER]

[rea de I/O]
max-lrecl = literal que indica o tamanho mximo de um registro lgico
max-blksize = literal que indica o tamanho mximo de um bloco
FULLTRK = o tamanho do bloco de sada deve ser o mximo que a capacidade da trilha
permitir.
DEFER = somente abrir o arquivo quando a primeira operao de I/O for emitida. O padro a
abertura de todos os arquivos no incio da atividade.
Exemplo 014
Leitura de arquivo VBS
//DS029014 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//*--------------------------------------------------------------//STEPEASY EXEC PGM=EZTPA00
//ENTRA
DD DSN=DS.#029.KL.PSVB,DISP=SHR
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 014
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS E RESPECTIVAS AREAS DE I/O
*-------------------------------------------------PARM VFM 150
FILE ENTRA
AL
1 4000 A
ALX5
1 5 A MASK HEX
ALX6
1 6 A MASK HEX
ALX7
1 7 A MASK HEX
ALX8
1 8 A MASK HEX
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WLL
W
7
N
*-------------------------------------------------* DECLARACAO DE PROCEDIMENTOS
*-------------------------------------------------*------------* ROTINA PRINCIPAL
*------------JOB INPUT ENTRA FINISH ESTATIS
IF
ENTRA:RECORD-LENGTH EQ 5
DISPLAY ENTRA:RECORD-LENGTH '/' ALX5 '/'
ELSE-IF ENTRA:RECORD-LENGTH EQ 6

EASYTRIEVE
2 Declarao de arquivos g) Arquivo SAM reg.varivel (ler)
DISPLAY ENTRA:RECORD-LENGTH '/' ALX6 '/'
ELSE-IF ENTRA:RECORD-LENGTH EQ 7
DISPLAY ENTRA:RECORD-LENGTH '/' ALX7 '/'
ELSE-IF ENTRA:RECORD-LENGTH EQ 8
DISPLAY ENTRA:RECORD-LENGTH '/' ALX8 '/'
END-IF
GO TO JOB
*------------* ROTINA DE FINALIZACAO
*------------ESTATIS. PROC
DISPLAY '************************************'
DISPLAY WLL '/' ENTRA:RECORD-COUNT ' REGISTROS LIDOS.'
DISPLAY '************************************'
END-PROC
********************************************************
* FIM **************************************************
********************************************************
//SAIDAS DD *
5 /5C5C5C5C5C/
6 /5C5C5C5C5C5C/
7 /5C5C5C5C5C5C5C/
8 /5C5C5C5C5C5C5C5C/
************************************
0000000/
4 REGISTROS LIDOS.
************************************
130/05/01 10.23.00
CA-EASYTRIEVE PLUS-6.2 9606
COMPRADOR EASYTRIEVE
0PROGRAMS AND ALL SUPPORTING MATERIALS COPYRIGHT (C) 1982, 1996 BY COMPUTER
ASSO
-FILE STATISTICS - CA-EASYTRIEVE PLUS 6.2 9606-30/05/01-10.23-JSN00024
ENTRA
4
INPUT
SAM VAR
BLK
6675

3 DECLARAO DE DADOS REAS DE I/O


A declarao de variveis feita atravs do DEFINE.
Observar que a prpria keyword DEFINE opcional, caso a declarao seja feita aps a
declarao de arquivos.
[DEFINE] [nome-arquivo:]nome-campo posio-inicial tamanho formato [decimais]
outros-atributos
Posio inicial = pode ser especificada de uma das seguintes maneiras :
inteiro1
*
* +inteiro2
nome-campo +inteiro3

indica a posio inicial (relativa a 1) do campo dentro da


rea que o contm.
indica que a posio inicial a prxima disponvel aps a
ltima declarao
indica que a posio inicial n bytes aps a prxima
disponvel aps a ltima declarao, sendo n indicado
atravs de inteiro2
indica que a posio inicial n bytes aps a o campo
referenciado atravs do nome, sendo n indicado atravs de
inteiro2

Tamanho

= indica o tamanho, EM BYTES, do campo sendo definido

Formato

= indica o formato dos dados no campo :

A
N
P

alfanumrico.
numrico decimal zonado. Mximo 16 bytes
numrico decimal compactado (com sinal). Mximo 16
bytes
numrico decimal compactado (sem sinal).
numrico binrio. Mximo 4 bytes.
Se especificado decimais, tem bit de sinal
Se no especificado decimais, no tem bit de sinal

U
B

Decimais

= indica a quantidade de casas decimais a considerar para o nmero contido

Outros atributos :
HEADING = indica a(s) literal(is) a ser(em) utilizada(s) nas linhas de cabealho que
identificam os campos listados.
Sintaxe : HEADING (literal1 [literal2] ... [literaln])
Cada literal ser colocada numa linha de cabealho.
MASK

= indica a mscara de edio para campos numricos a listar.

EASYTRIEVE
3 Declarao de dados reas de I/O

Sintaxe :
MASK BWZ (blank when zero)
ou
MASK HEX (para exibir em formato hexadecimal)
ou
MASK (mscara)
A mscara pode ter Zs e 9s, ponto(s) (separador de visualizao) e vrgula (separador
decimal), alm dos caracteres especiais desejados.
Outra forma de declarao :
[DEFINE] [nome-arquivo:] [nome-campo] posio-inicial [nome-arquivo2:]nome-campo2
Neste caso, o tamnho, o formato e as decimais de nome-campo
sero as mesmas de [nome-arquivo2:]nome-campo2
A ttulo de exemplos, podemos inicialmente voltar aos exemplos anteriores, utilizados na parte
referente declarao de arquivos, onde alguns casos mais simples so colocados. Convm revlos, agora que foi vista formalmente a sintaxe da declarao de dados.
Alm desses j vistos, outros exemplos so mostrados juntamente com a declarao de reas de
trabalho, no captulo seguinte.

4 DECLARAO DE DADOS REAS DE WORK


A declarao de variveis feita atravs do DEFINE.
Observar que a prpria keyword DEFINE opcional, caso a declarao seja feita aps a
declarao de arquivos.
Declarao de rea que NO sub-diviso de outra rea.
[DEFINE] nome-campo W tamanho formato [decimais] outros-atributos
W = indica rea de work (trabalho), no vinculada a rea de I/O.
Tamanho

= indica o tamanho, EM BYTES, do campo sendo definido

Formato

= indica o formato dos dados no campo :

A
N
P

alfanumrico.
numrico decimal zonado. Mximo 16 bytes
numrico decimal compactado (com sinal). Mximo 16
bytes
numrico decimal compactado (sem sinal).
numrico binrio. Mximo 4 bytes.
Se especificado decimais, tem bit de sinal
Se no especificado decimais, no tem bit de sinal

U
B

Decimais

= indica a quantidade de casas decimais a considerar para o nmero contido

Outros atributos :
HEADING = indica a(s) literal(is) a ser(em) utilizada(s) nas linhas de cabealho que
identificam os campos listados.
Sintaxe : HEADING (literal1 [literal2] ... [literaln])
Cada literal ser colocada numa linha de cabealho.
MASK

= indica a mscara de edio para campos numricos a listar.

Sintaxe :
MASK BWZ (blank when zero)
ou
MASK HEX (para exibir em formato hexadecimal)
ou
MASK (mscara)
A mscara pode ter Zs e 9s, ponto(s) (separador de visualizao) e vrgula (separador
decimal), alm dos caracteres especiais desejados.

EASYTRIEVE
4 Declarao de dados reas de work

Declarao de rea que sub-diviso de outra rea.


[DEFINE] [nome-arquivo:]nome-campo posio-inicial tamanho formato [decimais]
outros-atributos
Posio inicial = pode ser especificada de uma das seguintes maneiras :
inteiro1
*
* +inteiro2
nome-campo +inteiro3

indica a posio inicial (relativa a 1) do campo dentro da


rea que o contm.
indica que a posio inicial a prxima disponvel aps a
ltima declarao
indica que a posio inicial n bytes aps a prxima
disponvel aps a ltima declarao, sendo n indicado
atravs de inteiro2
indica que a posio inicial n bytes aps o campo
referenciado atravs do nome, sendo n indicado atravs de
inteiro2

Tamanho

= indica o tamanho, EM BYTES, do campo sendo definido

Formato

= indica o formato dos dados no campo :

A
N
P

alfanumrico.
numrico decimal zonado. Mximo 16 bytes
numrico decimal compactado (com sinal). Mximo 16
bytes
numrico decimal compactado (sem sinal).
numrico binrio. Mximo 4 bytes.
Se especificado decimais, tem bit de sinal
Se no especificado decimais, no tem bit de sinal

U
B

Decimais

= indica a quantidade de casas decimais a considerar para o nmero contido

Outros atributos :
HEADING = indica a(s) literal(is) a ser(em) utilizada(s) nas linhas de cabealho que
identificam os campos listados.
Sintaxe : HEADING (literal1 [literal2] ... [literaln])
Cada literal ser colocada numa linha de cabealho.
MASK

= indica a mscara de edio para campos numricos a listar.

Sintaxe :
MASK BWZ (blank when zero)
MASK HEX (para exibir em formato hexadecimal)

ou
ou

EASYTRIEVE
4 Declarao de dados reas de work

MASK (mscara)
A mscara pode ter Zs e 9s, ponto(s) (separador de visualizao) e vrgula (separador
decimal), alm dos caracteres especiais desejados.
VALUE
= indica o contedo inicial do campo. Assume zero para campos numricos
e brancos para alfanumricos
RESET
= indica que o contedo inicial deve ser restaurado a cada execuo de um
comando JOB ou SORT

Exemplos :
Exemplo 015
Declarao de variveis
//DS029015 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//*--------------------------------------------------------------//STEPEASY EXEC PGM=EZTPA00
//SAIDA
DD DSN=&&TEMP,DISP=(NEW,PASS),DCB=(LRECL=500,RECFM=FB)
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//RELAT1
DD SYSOUT=*
//RELAT2
DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 015
********************************************************
*-------------------------------------------------* GERA ARQUIVO DE TESTE --------------------------*-------------------------------------------------* DECLARACAO DE ARQUIVOS E RESPECTIVAS AREAS DE I/O
*-------------------------------------------------FILE RELAT1 PRINTER
FILE RELAT2 PRINTER
*--------------------------------------------------------------------* ARQUIVO DE SAIDA - ARQUIVO CLIENTES PESSOA FISICA
*--------------------------------------------------------------------FILE SAIDA
CLI-REG-CADASTRO
1
200 A
* DADOS COMUNS PESSOA FISICA E JURIDICA -------------------CLI-NOME
16 35 A HEADING ('NOME DO CLIENTE')
CLI-ENDERECO
61 35 A
CLI-BAIRRO
96 20 A
CLI-CIDADE
116 15 A
CLI-ESTADO
131 02 A
CLI-CEP
133 08 N MASK HEX
CLI-TIPOPESSOA
200 01 A

EASYTRIEVE
4 Declarao de dados reas de work
* DADOS PESSOA FISICA -------------------------------------CLI-CPF
1 15 N HEADING ('CPF')
CLI-SALARIO
* 08 P 2 MASK ('ZZZZZZZ.ZZZ.ZZ9,99')
CLI-SITUACAO
* 01 A
CLI-DATANASC
* 08 N
MASK ('9999/99/99')
CLI-SSAANASC CLI-DATANASC
4 N
CLI-SSNASC
CLI-DATANASC
02 N
CLI-AANASC
CLI-DATANASC +2 02 N
CLI-MMNASC
CLI-DATANASC +4 02 N
CLI-DDNASC
CLI-DATANASC +6 02 N
CLI-QTDDFILHOS
* 01 B
MASK HEX
CLI-FILLER1
* 12 A
* COMPRAS TOTAIS DESDE QUE TORNOU-SE CLIENTE
CLI-QTDCOMPRASTOT
* 03 P
CLI-VALCOMPRASTOT
* 06 P 2
* COMPRAS MEDIA MENSAL
CLI-QTDCOMPRASMES
* 03 P
CLI-VALCOMPRASMES
* 06 P 2
* DADOS PESSOA JURIDICA -----------------------------------CLI-CNPJ
1 15 N HEADING ('CGC')
CLI-CREDITOMAX
141 08 P 2 MASK ('ZZZZZZZ.ZZZ.ZZ9,99')
CLI-LIMITEUSADO
149 08 P 2
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WGG
W
7 N
WGGLASTDIG WGG +6 1 N
*-------------------------------------------------* DECLARACAO DE PROCEDIMENTOS
*-------------------------------------------------*------------* ROTINA PRINCIPAL
*------------JOB INPUT NULL FINISH ESTATIS
VOLTAGRAVA.
IF WGG LT 10
WGG = WGG + 1
CLI-NOME
= WGG
CLI-ENDERECO
= WGG
CLI-BAIRRO
= WGG
CLI-CIDADE
= WGG
CLI-ESTADO
= WGG
CLI-CEP
= WGG
IF WGGLASTDIG EQ 0 2 4 6 8
CLI-CPF
= WGG
CLI-SALARIO
= WGG
CLI-SITUACAO
= WGG
CLI-SSAANASC
= WGG
CLI-SSNASC
= WGG
CLI-AANASC
= WGG
CLI-MMNASC
= WGG
CLI-DDNASC
= WGG
CLI-QTDDFILHOS
= WGG
CLI-FILLER1
= WGG
CLI-QTDCOMPRASTOT = WGG
CLI-VALCOMPRASTOT = WGG
CLI-QTDCOMPRASMES = WGG

EASYTRIEVE
4 Declarao de dados reas de work
CLI-VALCOMPRASMES = WGG
CLI-TIPOPESSOA
= 'F'
PUT SAIDA
PRINT RELAT1
ELSE
CLI-CNPJ
= WGG
CLI-CREDITOMAX
= WGG
CLI-LIMITEUSADO
= WGG
CLI-TIPOPESSOA
= 'J'
PUT SAIDA
PRINT RELAT2
END-IF
GO TO VOLTAGRAVA
END-IF
STOP
*------------* ROTINA DE FINALIZACAO
*------------ESTATIS. PROC
DISPLAY '***************************************'
DISPLAY 'GRAVADOS
= ' WGG
DISPLAY '***************************************'
END-PROC
*------------* DECLARACAO DOS RELATORIOS
*------------*
* RELAT1
*
REPORT RELAT1 PRINTER RELAT1 NOADJUST NOHEADING
TITLE 1 '
PROGRAMA EXEMPLO 015'
TITLE 2 '
RELAT1 - PESSOAS FISICAS
LINE 01 'CLI-CPF
='
+
CLI-CPF
LINE 02 'CLI-NOME
='
+
CLI-NOME
LINE 03 'CLI-ENDERECO
='
+
CLI-ENDERECO
LINE 04 'CLI-BAIRRO
='
+
CLI-BAIRRO
LINE 05 'CLI-CIDADE
='
+
CLI-CIDADE
LINE 06 'CLI-ESTADO
='
+
CLI-ESTADO
LINE 07 'CLI-CEP
='
+
CLI-CEP
LINE 08 'CLI-SALARIO
='
+
CLI-SALARIO
LINE 09 'CLI-SITUACAO
='
+
CLI-SITUACAO
LINE 10 'CLI-DATANASC
='
+
CLI-DATANASC
LINE 11 'CLI-QTDDFILHOS
='
+
CLI-QTDDFILHOS
LINE 12 'CLI-FILLER1
='
+
CLI-FILLER1
LINE 13 'CLI-QTDCOMPRASTOT ='
+

'

EASYTRIEVE
4 Declarao de dados reas de work
CLI-QTDCOMPRASTOT
LINE 14 'CLI-VALCOMPRASTOT ='
+
CLI-VALCOMPRASTOT
LINE 15 'CLI-QTDCOMPRASMES ='
+
CLI-QTDCOMPRASMES
LINE 16 'CLI-VALCOMPRASMES ='
+
CLI-VALCOMPRASMES
LINE 17 'CLI-TIPOPESSOA
='
+
CLI-TIPOPESSOA
LINE 18 '-----------------------------------------------------------'
*
* RELAT2
*
REPORT RELAT2 PRINTER RELAT2 NOADJUST
TITLE 1 '
PROGRAMA EXEMPLO 015'
TITLE 2 '
RELAT2 - PESSOAS JURIDICAS
'
HEADING CLI-CNPJ
('CNPJ')
HEADING CLI-NOME
('NOME')
HEADING CLI-ENDERECO
('ENDE')
HEADING CLI-BAIRRO
('BAIRRO')
HEADING CLI-CIDADE
('CID')
HEADING CLI-ESTADO
('UF')
HEADING CLI-CEP
('CEP')
HEADING CLI-CREDITOMAX ('CRED')
HEADING CLI-LIMITEUSADO ('LIM')
HEADING CLI-TIPOPESSOA ('TP')
LINE 01 +
CLI-CNPJ
+
CLI-NOME
+
CLI-TIPOPESSOA
*
CLI-ENDERECO
+
*
CLI-BAIRRO
+
*
CLI-CIDADE
+
*
CLI-ESTADO
+
*
CLI-CEP
+
*
CLI-CREDITOMAX +
*
CLI-LIMITEUSADO +
//SAIDAS
DD *
>>>>>>>>>>>>>>SYSPRINT
***************************************
GRAVADOS
= 0000010
***************************************
129/05/01 9.39.57
CA-EASYTRIEVE PLUS-6.2 9606
COMPRADOR EASYTRIEVE
0PROGRAMS AND ALL SUPPORTING MATERIALS COPYRIGHT (C) 1982, 1996 BY COMPUTER
-FILE STATISTICS - CA-EASYTRIEVE PLUS 6.2 9606-29/05/01- 9.39-JSN00057
RELAT1
96
OUTPUT
SAM FIX UNBLK
ASA
133
RELAT2
9
OUTPUT
SAM FIX UNBLK
ASA
133
SAIDA
10
OUTPUT
SAM FIX
BLK
500
>>>>>>>>>>>>>>RELAT1
129/05/01
PROGRAMA EXEMPLO 015
RELAT1 - PESSOAS FISICAS
CLI-CPF
=
000000000000002
CLI-NOME
=
00000000000000000000000000000000002
CLI-ENDERECO
=
00000000000000000000000000000000002
CLI-BAIRRO
=
00000000000000000002

EASYTRIEVE
4 Declarao de dados reas de work
CLI-CIDADE
=
000000000000002
CLI-ESTADO
=
02
CLI-CEP
=
F0F0F0F0F0F0F0F2
CLI-SALARIO
=
2,00
CLI-SITUACAO
=
2
CLI-DATANASC
=
0202/02/02
CLI-QTDDFILHOS
=
02
CLI-FILLER1
=
000000000002
CLI-QTDCOMPRASTOT =
2
CLI-VALCOMPRASTOT =
2,00
CLI-QTDCOMPRASMES =
2
CLI-VALCOMPRASMES =
2,00
CLI-TIPOPESSOA
=
F
----------------------------------------------------------CLI-CPF
=
000000000000004
CLI-NOME
=
00000000000000000000000000000000004
CLI-ENDERECO
=
00000000000000000000000000000000004
CLI-BAIRRO
=
00000000000000000004
CLI-CIDADE
=
000000000000004
CLI-ESTADO
=
04
CLI-CEP
=
F0F0F0F0F0F0F0F4
CLI-SALARIO
=
4,00
CLI-SITUACAO
=
4
CLI-DATANASC
=
0404/04/04
CLI-QTDDFILHOS
=
04
CLI-FILLER1
=
000000000004
CLI-QTDCOMPRASTOT =
4
CLI-VALCOMPRASTOT =
4,00
CLI-QTDCOMPRASMES =
4
CLI-VALCOMPRASMES =
4,00
CLI-TIPOPESSOA
=
F
----------------------------------------------------------CLI-CPF
=
000000000000006
CLI-NOME
=
00000000000000000000000000000000006
CLI-ENDERECO
=
00000000000000000000000000000000006
CLI-BAIRRO
=
00000000000000000006
CLI-CIDADE
=
000000000000006
CLI-ESTADO
=
06
CLI-CEP
=
F0F0F0F0F0F0F0F6
CLI-SALARIO
=
6,00
CLI-SITUACAO
=
6
CLI-DATANASC
=
0606/06/06
CLI-QTDDFILHOS
=
06
CLI-FILLER1
=
000000000006
CLI-QTDCOMPRASTOT =
6
CLI-VALCOMPRASTOT =
6,00
CLI-QTDCOMPRASMES =
6
CLI-VALCOMPRASMES =
6,00
CLI-TIPOPESSOA
=
F
129/05/01
PROGRAMA EXEMPLO 015
RELAT1 - PESSOAS FISICAS
----------------------------------------------------------CLI-CPF
=
000000000000008
CLI-NOME
=
00000000000000000000000000000000008
CLI-ENDERECO
=
00000000000000000000000000000000008
CLI-BAIRRO
=
00000000000000000008

EASYTRIEVE
4 Declarao de dados reas de work
CLI-CIDADE
=
000000000000008
CLI-ESTADO
=
08
CLI-CEP
=
F0F0F0F0F0F0F0F8
CLI-SALARIO
=
8,00
CLI-SITUACAO
=
8
CLI-DATANASC
=
0808/08/08
CLI-QTDDFILHOS
=
08
CLI-FILLER1
=
000000000008
CLI-QTDCOMPRASTOT =
8
CLI-VALCOMPRASTOT =
8,00
CLI-QTDCOMPRASMES =
8
CLI-VALCOMPRASMES =
8,00
CLI-TIPOPESSOA
=
F
----------------------------------------------------------CLI-CPF
=
000000000000010
CLI-NOME
=
00000000000000000000000000000000010
CLI-ENDERECO
=
00000000000000000000000000000000010
CLI-BAIRRO
=
00000000000000000010
CLI-CIDADE
=
000000000000010
CLI-ESTADO
=
10
CLI-CEP
=
F0F0F0F0F0F0F1F0
CLI-SALARIO
=
10,00
CLI-SITUACAO
=
0
CLI-DATANASC
=
1010/10/10
CLI-QTDDFILHOS
=
0A
CLI-FILLER1
=
000000000010
CLI-QTDCOMPRASTOT =
10
CLI-VALCOMPRASTOT =
10,00
CLI-QTDCOMPRASMES =
10
CLI-VALCOMPRASMES =
10,00
CLI-TIPOPESSOA
=
F
---------------------------------------------------------->>>>>>>>>>>>>>RELAT2
129/05/01
PROGRAMA EXEMPLO 015
RELAT2 - PESSOAS JURIDICAS
CNPJ
NOME
TP
0000000000000001
00000000000000000000000000000000001
J
000000000000003
00000000000000000000000000000000003
J
000000000000005
00000000000000000000000000000000005
J
000000000000007
00000000000000000000000000000000007
J
000000000000009
00000000000000000000000000000000009
J

5 VARIVEIS EASYTRIEVE; PEGAR PARM DO EXEC


O EASYTRIEVE tem variveis que so definidas automaticamente, e que podem ser acessadas
(algumas no podem ser modificadas). As principais so as seguintes :
SYSDATE = campo alfanumrico de 8 bytes com a data do dia (AA/MM/DD ver
Caractersticas de instalao)
SYSTIME = campo alfanumrico de 8 bytes (HH.MM.SS ver Caractersticas de instalao)
PARM-REGISTER = campo numrico binrio de 4 bytes que contm o contedo do registrador
1 quando da entrada da execuo do Easytrieve. O registrador 1 contm o endereo de uma lista
de parmetros fornecida atravs do PARM do EXEC. Deve ser usado atravs da chamada da
subrotina EZTPX01 (ver Uso de PARM no carto EXEC).
RETURN-CODE = campo numrico binrio de 4 bytes cujo contedo retornado ao sistema
operacional ao trmino da execuo do Easytrieve, para poder ser testado via COND.
RECORD-LENGTH = campo numrico binrio de 2 bytes cujo contedo colocado pelo Easy, e
o tamanho do registro lgico processado.
RECORD-COUNT = campo numrico binrio de 4 bytes cujo contedo colocado pelo Easy, e
o nmero sequencial do registro dentro do arquivo.
FILE-STATUS = campo com o file-status de um arquivo VSAM, cujo contedo colocado pelo
Easy e indica o resultado da ltima operao de I/O efetuada para o arquivo.
Os file-status retornados so :
00
04
08
12
16
128

=
=
=
=
=
=

OK
EOF no GET
DUP KEY no PUT ou WRITE
KEY fora de sequncia no PUT
RECORD NOT FOUND no READ
falta DD no JCL para o arquivo

LEVEL = campo numrico que indica qual quebra est sendo processada (detalhes e exemplos
adiante, no captulo referente a relatrios).
TALLY = campo numrico cujo contedo a quantidade de registros utilizados para a obteno
de um total.

EASYTRIEVE
5 Variveis Easytrieve; pegar PARM do EXEC

Exemplo 016
Utilizao de variveis Easytrieve; pegar PARM do EXEC
//DS029016 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//*--------------------------------------------------------------//STEPEASY EXEC PGM=EZTPA00,PARM='PROCESSA=S'
//ENTRA
DD DSN=DV.#029.KL.EZTVSAM,DISP=SHR
//RELAT
DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 016
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS E RESPECTIVAS AREAS DE I/O
*-------------------------------------------------FILE RELAT PRINTER
FILE ENTRA VS
AL
1 80 A
AL-NOME
1 15 A
AL-DATA
16 08 N
AL-SALDO
24 10 N 2
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WLL
W
7
N
PARMVEIO W
32 A
PARMLEN PARMVEIO
2 B
PARMTXT PARMVEIO +2 30 A
*-------------------------------------------------* DECLARACAO DE PROCEDIMENTOS
*-------------------------------------------------*------------* ROTINA PRINCIPAL
*------------JOB INPUT ENTRA START ANTESDETUDO FINISH DEPOISDETUDO
WLL = WLL + 1
DISPLAY '* DISPLAY DO REGISTRO - INICIO *****'
DISPLAY 'FILE-STATUS
= ' ENTRA:FILE-STATUS
DISPLAY 'RECORD-LENGTH = ' ENTRA:RECORD-LENGTH
DISPLAY 'RECORD-COUNT = ' ENTRA:RECORD-COUNT
DISPLAY '* DISPLAY DO REGISTRO - FIM ********'
PRINT SYSREL
GO TO JOB
*------------* ROTINA DE INICIALIZACAO
*------------ANTESDETUDO. PROC
CALL EZTPX01 USING (PARM-REGISTER, PARMVEIO)
DISPLAY '************************************'
DISPLAY '* INICIAL **************************'

EASYTRIEVE
5 Variveis Easytrieve; pegar PARM do EXEC
DISPLAY '************************************'
DISPLAY '************************************'
DISPLAY 'PARMLEN=' PARMLEN
DISPLAY '************************************'
DISPLAY 'PARMTXT=/' PARMTXT '/'
DISPLAY '************************************'
DISPLAY 'SYSDATE
= ' SYSDATE
DISPLAY HEX SYSDATE
DISPLAY '************************************'
DISPLAY 'SYSTIME
= ' SYSTIME
DISPLAY HEX SYSTIME
DISPLAY '************************************'
END-PROC
*------------* ROTINA DE FINALIZACAO
*------------DEPOISDETUDO. PROC
DISPLAY '************************************'
DISPLAY '* FINAL ****************************'
DISPLAY '************************************'
DISPLAY 'FILE-STATUS
= ' ENTRA:FILE-STATUS
DISPLAY HEX ENTRA:FILE-STATUS
DISPLAY 'RECORD-COUNT = ' ENTRA:RECORD-COUNT
DISPLAY HEX ENTRA:RECORD-COUNT
DISPLAY '************************************'
IF WLL EQ 0
RETURN-CODE = 0
ELSE
RETURN-CODE = 4
END-IF
END-PROC
*------------* DECLARACAO DO RELATORIO
*------------REPORT SYSREL PRINTER RELAT NOADJUST
CONTROL FINAL
TITLE 1 '
PROGRAMA EXEMPLO 016'
LINE 1 TALLY AL-NOME AL-DATA AL-SALDO
********************************************************
* FIM **************************************************
********************************************************
//SAIDAS
DD *
>>>>>>>>>>>>>>>SYSPRINT
************************************
* INICIAL **************************
************************************
************************************
PARMLEN=
10
************************************
PARMTXT=/PROCESSA=S
/
************************************
SYSDATE
= 29/05/01
CHAR 29/05/01
ZONE FF6FF6FF
NUMR 29105101
1...5...
0************************************

EASYTRIEVE
5 Variveis Easytrieve; pegar PARM do EXEC
SYSTIME
= 9.43.26
CHAR 9.43.26
ZONE 4F4FF4FF
NUMR 09B43B26
1...5...
0************************************
* DISPLAY DO REGISTRO - INICIO *****
FILE-STATUS
=
RECORD-LENGTH =
80
RECORD-COUNT =
1
* DISPLAY DO REGISTRO - FIM ********
* DISPLAY DO REGISTRO - INICIO *****
FILE-STATUS
=
RECORD-LENGTH =
80
RECORD-COUNT =
2
* DISPLAY DO REGISTRO - FIM ********
* DISPLAY DO REGISTRO - INICIO *****
FILE-STATUS
=
RECORD-LENGTH =
80
RECORD-COUNT =
3
* DISPLAY DO REGISTRO - FIM ********
* DISPLAY DO REGISTRO - INICIO *****
FILE-STATUS
=
RECORD-LENGTH =
80
RECORD-COUNT =
4
* DISPLAY DO REGISTRO - FIM ********
* DISPLAY DO REGISTRO - INICIO *****
FILE-STATUS
=
RECORD-LENGTH =
80
RECORD-COUNT =
5
* DISPLAY DO REGISTRO - FIM ********
************************************
* FINAL ****************************
************************************
FILE-STATUS
=
4
CHAR
ZONE 0000
NUMR 0004
1...
0RECORD-COUNT =
5
CHAR
ZONE 0000
NUMR 0005
1...
0************************************
129/05/01 9.43.26

CA-EASYTRIEVE PLUS-6.2 9606


COMPRADOR EASYTRIEVE
0PROGRAMS AND ALL SUPPORTING MATERIALS COPYRIGHT (C) 1982, 1996 BY COMPUTER
-FILE STATISTICS - CA-EASYTRIEVE PLUS 6.2 9606-29/05/01- 9.43-JSN00026
RELAT
9
OUTPUT
SAM FIX UNBLK
ASA
133
ENTRA
5
INPUT
VSAM
UNDEF
80

6 Atividade JOB e statements START e FINISH


Na estrutura de um programa em Easytrieve, o que caracteriza a parte de procedimentos um
conjunto de ATIVIDADES (muitas vezes uma nica atividade).
Cada atividade declarada atravs de um statement JOB ou um statement SORT.
A estrutura de uma atividade JOB a seguinte :
PARM
declarao arquivos
declarao variveis
JOB .....
.
.
.
comandos
.
.
.
definio do(s) REPORT(s)
.
.
.

O statement JOB tem a seguinte sintaxe :


JOB [START nome-proc1] [FINISH nome-proc2] [NAME nome-job]

O statement JOB sem a especificao de INPUT faz o Easy assumir como INPUT o primeiro
FILE que no seja PRINTER definido.
JOB INPUT NULL [START nome-proc1] [FINISH nome-proc2] [NAME nome-job]

O statement JOB com a especificao de INPUT NULL indica ao Easy que no h arquivo de
entrada a ser lido automaticamente por ele.
JOB INPUT

nome-arquivo [START nome-proc1] [FINISH nome-proc2] +


[NAME nome-job]

JOB INPUT

SQL [START nome-proc1] [FINISH nome-proc2] [NAME nome-job]

(ver no captulo especfico Uso do DB2)

EASYTRIEVE
6 Atividade Job e statements Start e Finish

O statement JOB com a especificao de INPUT com nome-de-arquivo indica ao Easy que o
arquivo de entrada a ser lido automaticamente por ele aquele cujo nome est especificado.
JOB INPUT

nome-arquivo KEY nome-campo1 [nome-campo2] ... +


[START nome-proc1] [FINISH nome-proc2] [NAME nome-job]

O statement JOB com a especificao de INPUT com nome-de-arquivo e indicao de KEY,


indica ao Easy que o arquivo de entrada a ser lido automaticamente por ele aquele cujo nome
est especificado, e que o(s) campo(s) especificado(s) atravs de KEY devem servir de base para
um processo de MATCH (ver recurso de MATCH no captulo especfico).
A clusula START indica o nome de uma procedure (PROC) que deve ser executada ANTES do
incio da leitura do arquivo.
A clusula FINISH indica o nome de uma procedure (PROC) que deve ser executada APS a
leitura automtica de todo o arquivo, antes de encerrar a atividade.
A clusula NAME d nome atividade JOB (somente para documentao).
Exemplo 017
Atividade JOB sem INPUT explcito. Assume como input o primeiro FILE no-printer (arquivo
existente, com registros)
//DS029017 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//*--------------------------------------------------------------//STEPEASY EXEC PGM=EZTPA00,PARM='PROCESSA=S'
//ENTRA
DD DSN=DV.#029.KL.EZTVSAM,DISP=SHR
//SAIDA
DD DSN=&&SAIDA,DISP=(NEW,PASS),DCB=(LRECL=80,RECFM=FB)
//RELAT
DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 017
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS E RESPECTIVAS AREAS DE I/O
*-------------------------------------------------FILE RELAT PRINTER
FILE ENTRA VS
AL
1 80 A
AL-NOME
1 15 A
AL-DATA
16 08 N
AL-SALDO
24 10 N 2
FILE SAIDA

EASYTRIEVE
6 Atividade Job e statements Start e Finish
AG
1 80 A
AG-NOME
1 15 A
AG-DATA
16 08 N
AG-SALDO
24 10 N 2
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WLL
W
7
N
*-------------------------------------------------* DECLARACAO DE PROCEDIMENTOS
*-------------------------------------------------*------------* ROTINA PRINCIPAL
*------------JOB
DISPLAY 'PASSEI POR AQUI'
********************************************************
* FIM **************************************************
********************************************************
//SAIDAS
DD *
PASSEI POR AQUI
PASSEI POR AQUI
PASSEI POR AQUI
PASSEI POR AQUI
PASSEI POR AQUI
129/05/01 9.45.47
CA-EASYTRIEVE PLUS-6.2 9606
COMPRADOR EASYTRIEVE
0PROGRAMS AND ALL SUPPORTING MATERIALS COPYRIGHT (C) 1982, 1996 BY COMPUTER
-FILE STATISTICS - CA-EASYTRIEVE PLUS 6.2 9606-29/05/01- 9.45-JSN00028
ENTRA
5
INPUT
VSAM
UNDEF
80

Exemplo 018
Atividade JOB sem INPUT explcito. Assume como input o primeiro FILE no-printer (arquivo
no existente)
//DS029018 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//*--------------------------------------------------------------//STEPEASY EXEC PGM=EZTPA00,PARM='PROCESSA=S'
//ENTRA
DD DSN=DV.#029.KL.EZTVSAM,DISP=SHR
//SAIDA
DD DSN=&&SAIDA,DISP=(NEW,PASS),DCB=(LRECL=80,RECFM=FB)
//RELAT
DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 018
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS E RESPECTIVAS AREAS DE I/O
*-------------------------------------------------FILE RELAT PRINTER

EASYTRIEVE
6 Atividade Job e statements Start e Finish
FILE SAIDA
AG
1 80 A
AG-NOME
1 15 A
AG-DATA
16 08 N
AG-SALDO
24 10 N 2
FILE ENTRA VS
AL
1 80 A
AL-NOME
1 15 A
AL-DATA
16 08 N
AL-SALDO
24 10 N 2
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WLL
W
7
N
*-------------------------------------------------* DECLARACAO DE PROCEDIMENTOS
*-------------------------------------------------*------------* ROTINA PRINCIPAL
*------------JOB
DISPLAY 'PASSEI POR AQUI'
********************************************************
* FIM **************************************************
********************************************************
//SAIDAS
DD *
129/05/01 9.47.18
CA-EASYTRIEVE PLUS-6.2 9606
COMPRADOR EASYTRIEVE
0PROGRAMS AND ALL SUPPORTING MATERIALS COPYRIGHT (C) 1982, 1996 BY COMPUTER
-FILE STATISTICS - CA-EASYTRIEVE PLUS 6.2 9606-29/05/01- 9.47-JSN00028
SAIDA
0
INPUT
SAM FIX
BLK
80

Exemplo 019
Atividade JOB com INPUT NULL com STOP
//DS029019 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//*--------------------------------------------------------------//STEPEASY EXEC PGM=EZTPA00,PARM='PROCESSA=S'
//ENTRA1
DD DSN=DV.#029.KL.EZTVSAM,DISP=SHR
//SAIDA
DD DSN=&&SAIDA,DISP=(NEW,PASS),DCB=(LRECL=80,RECFM=FB)
//RELAT
DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 019
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS E RESPECTIVAS AREAS DE I/O
*--------------------------------------------------

EASYTRIEVE
6 Atividade Job e statements Start e Finish
FILE RELAT PRINTER
FILE ENTRA1 VS
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WLL
W
7
N
*-------------------------------------------------* ATIVIDADE 1
*-------------------------------------------------JOB INPUT NULL
DISPLAY 'ATIVIDADE 1'
STOP
********************************************************
* FIM **************************************************
********************************************************
//SAIDAS
DD *
ATIVIDADE 1

Exemplo 020
Atividade JOB com INPUT NULL sem STOP (assume GO TO JOB)
//DS029020 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//*--------------------------------------------------------------//STEPEASY EXEC PGM=EZTPA00,PARM='PROCESSA=S'
//ENTRA1
DD DSN=DV.#029.KL.EZTVSAM,DISP=SHR
//SAIDA
DD DSN=&&SAIDA,DISP=(NEW,PASS),DCB=(LRECL=80,RECFM=FB)
//RELAT
DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 020
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS E RESPECTIVAS AREAS DE I/O
*-------------------------------------------------FILE RELAT PRINTER
FILE ENTRA1 VS
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WLL
W
7
N
*-------------------------------------------------* ATIVIDADE 1
*-------------------------------------------------JOB INPUT NULL
DISPLAY 'ATIVIDADE 1'
* SEM STOP ASSUME
GO TO JOB
* PORTANTO, NESTE CASO, ENTRA EM LOOP DE DISPLAY
********************************************************
* FIM **************************************************
********************************************************

EASYTRIEVE
6 Atividade Job e statements Start e Finish
//SAIDAS

DD *

Exemplo 021
3 Atividades JOB
//DS029021 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//*--------------------------------------------------------------//STEPEASY EXEC PGM=EZTPA00,PARM='PROCESSA=S'
//ENTRA1
DD DSN=DV.#029.KL.EZTVSAM,DISP=SHR
//ENTRA2
DD DSN=DV.#029.KL.EZTVSAM,DISP=SHR
//ENTRA3
DD DSN=DV.#029.KL.EZTVSAM,DISP=SHR
//SAIDA
DD DSN=&&SAIDA,DISP=(NEW,PASS),DCB=(LRECL=80,RECFM=FB)
//RELAT
DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 021
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS E RESPECTIVAS AREAS DE I/O
*-------------------------------------------------FILE RELAT PRINTER
FILE ENTRA1 VS
FILE ENTRA2 VS
FILE ENTRA3 VS
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WLL
W
7
N
*-------------------------------------------------* ATIVIDADE 1
*-------------------------------------------------JOB
DISPLAY 'ATIVIDADE 1'
*-------------------------------------------------* ATIVIDADE 2
*-------------------------------------------------JOB
DISPLAY 'ATIVIDADE 2'
*-------------------------------------------------* ATIVIDADE 3
*-------------------------------------------------JOB
DISPLAY 'ATIVIDADE 3'
********************************************************
* FIM **************************************************
********************************************************
//SAIDAS
DD *
ATIVIDADE 1
ATIVIDADE 1
ATIVIDADE 1

EASYTRIEVE
6 Atividade Job e statements Start e Finish
ATIVIDADE 1
ATIVIDADE 1
129/05/01 9.50.53

CA-EASYTRIEVE PLUS-6.2 9606


COMPRADOR EASYTRIEVE
0PROGRAMS AND ALL SUPPORTING MATERIALS COPYRIGHT (C) 1982, 1996 BY COMPUTER
-FILE STATISTICS - CA-EASYTRIEVE PLUS 6.2 9606-29/05/01- 9.50-JSN00018
ENTRA1
5
INPUT
VSAM
UNDEF
80
ATIVIDADE 2
ATIVIDADE 2
ATIVIDADE 2
ATIVIDADE 2
ATIVIDADE 2
129/05/01 9.50.53
CA-EASYTRIEVE PLUS-6.2 9606
COMPRADOR EASYTRIEVE
0PROGRAMS AND ALL SUPPORTING MATERIALS COPYRIGHT (C) 1982, 1996 BY COMPUTER
-FILE STATISTICS - CA-EASYTRIEVE PLUS 6.2 9606-29/05/01- 9.50-JSN00023
ENTRA1
5
INPUT
VSAM
UNDEF
80
ATIVIDADE 3
ATIVIDADE 3
ATIVIDADE 3
ATIVIDADE 3
ATIVIDADE 3
129/05/01 9.50.53
CA-EASYTRIEVE PLUS-6.2 9606
COMPRADOR EASYTRIEVE
0PROGRAMS AND ALL SUPPORTING MATERIALS COPYRIGHT (C) 1982, 1996 BY COMPUTER
-FILE STATISTICS - CA-EASYTRIEVE PLUS 6.2 9606-29/05/01- 9.50-JSN00028
ENTRA1
5
INPUT
VSAM
UNDEF
80

7 - Comandos de processamento
a) Comando STOP
Quando executado, encerra imediatamente a execuo da atividade (JOB ou SORT).
b) Expresses e assinalaes (movimentos)
Uma expresso utilizada para indicar um conjunto de operaes entre literais e variveis.
As operaes so :
+
*
/

soma
subtrao
multiplicao
diviso

A ordem de resoluo segue os padres matemticos.


Podem ser utilizados parnteses para priorizar as operaes.
Exemplos :
SALARIO * 0.5 + 10.00
AL-QTDD / 100
DESPREZADOS + 1
Em geral, as expresses so utilizadas para que o resultado do clculo seja colocado (atribuido)
numa varivel receptora. Para tal, utiliza-se uma atribuio.
A sintaxe para a atribuio :
variavelreceptora [INTEGER] [ | ROUNDED | TRUNCATED | ] =
| variavel | literal | expressao |

ou
variavelreceptora [INTEGER] [ | ROUNDED | TRUNCATED | ] EQ
| variavel | literal | expressao |

ou
variavelreceptora =

sendo

variavel | AND | OR | XOR |


| variavel | literal |

EASYTRIEVE
7 Comandos de processamento a) Stop b) Expresses e assinalaes

INTEGER = despreza a parte decimal do campo emissor


ROUNDED = soma 5 ao ltimo algarismo significativo da parte decimal (ex. 10.75 movido
como 10.8)
TRUNCATED = trunca os algarismos direita da parte decimal e/ou os algarismos esquerda da
parte inteira.
Exemplos :
ADICIONAL = SALARIO * 0.5 + 10.00
UMPORCENTO = AL-QTDD / 100
DESPREZADOS = DESPREZADOS + 1
SUBTOTAL = 0
Uma outra forma de atribuio (movimento) atravs dos comandos MOVE e MOVE LIKE.
Sua sintaxe a seguinte :
MOVE | nome-arquivo1
[ | nome-campo3
TO
| nome-arquivo2
[ | nome-campo4
[FILL literal5]

| nome-registro1 | nome-campo1 | literal1 |


| literal3 | ]
| nome-registro2 | nome-campo2 |
| literal4 | ]

ou
MOVE | SPACE | SPACES | ZERO | ZEROS | ZEROES | TO nome-campo

sendo :
nome-arquivo1 = nome do arquivo cuja area de I/O ser a emissora do movimento
nome-registro1 = nome da area de I/O que ser a emissora no movimento
nome-campo1 = campo emissor
literal1 = campo emissor
nome-arquivo2 = nome do arquivo cuja area de I/O ser a receptora do movimento
nome-registro2 = nome da area de I/O que ser a receptora no movimento
nome-campo2 = campo receptor
nome-campo3 = varivel com um nmero que indica a quantidade de bytes no campo emissor
literal3 = literal numrica que indica a quantidade de bytes no campo emissor
nome-campo4 = varivel com um nmero que indica a quantidade de bytes no campo receptor
literal4 = literal numrica que indica a quantidade de bytes no campo receptor
literal5 = literal que indica o preenchimento a ser efetuado caso o tamanho do campo receptor
seja maior que o tamanho do campo emissor.

O comando MOVE LIKE tem a seguinte sintaxe:


MOVE LIKE | nome-arq1 | nome-reg1 | TO | nome-arq2 | nome-reg2 |

Os campos cujos nomes forem iguais tanto nos campos emissores quanto nos receptores sero
movidos. Na sintaxe, temos :
nome-arq1 = nome do arquivo cuja area de I/O ser a emissora do movimento
nome-reg1 = nome do campo (rea de I/O de arquivo) cujas areas sero as emissoras do
movimento
nome-arq2 = nome do arquivo cuja area de I/O ser a receptora do movimento
nome-reg2 = nome do campo (rea de I/O de arquivo) cujas reas sero as receptoras do
movimento
Exemplo :
FILE ENTRA
REG-ENTRA
1 80 A
COD-CLI
1 5 N
COD-AREA
6 3 A
NOME-CLI
9 30 A
SALDO
39 9 N 2
FILE SAI
REG-SAI
1 80 A
COD-CLI
1 5 N
COD-AREA
6 3 A
NOME-CLI
9 30 A
VALOR
39 9 N 2
.
.
MOVE LIKE ENTRA TO SAI
MOVE LIKE REG-ENTRA TO REG-SAI

ou

Os campos COD-CLI, COD-AREA e NOME-CLI do arquivo ENTRA sero movidos para os


campos COD-CLI, COD-AREA e NOME-CLI do arquivo SAI.
Exemplo 022
Expresses e atribuies / movimentos
//DS029022 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//*--------------------------------------------------------------//STEPEASY EXEC PGM=EZTPA00,PARM='PROCESSA=S'
//ENTRA
DD *
ALBERTO
198802290000000001
ZIGOMAR
200105300000000010
MAFALDA
200010150000000100
VALDICE
199912230000001000
//SAIDA
DD DSN=&&TEMP,DISP=(NEW,PASS),DCB=(LRECL=500,RECFM=FB)
//SYSOUT
DD SYSOUT=*

EASYTRIEVE
7 Comandos de processamento b) Expresses e assinalaes
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 022
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS E RESPECTIVAS AREAS DE I/O
*-------------------------------------------------FILE ENTRA
AL
1 80 A
AL-NOME
1 15 A
AL-DATA
16 08 N
AL-SALDO
24 10 N 2
FILE SAIDA
AG
1 80 A
AG-PARCIAL
1 34 A
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WLL
W
7
N
WXX
W
7
N
WALFA
W
3
A
WBETA
W
3
A
WRECEB
W 40
A
DIVIDENDO W 12
N
DIVISOR
W
4
N
COCIENTE W
8
N
RESTO
W
4
N
3I0D
W
3
N
. * 3 INTEIROS 0 DECIMAIS
2I0D
W
2
N
. * 2 INTEIROS 0 DECIMAIS
3I2D
W
5
N 2
. * 3 INTEIROS 2 DECIMAIS
2I1D
W
3
N 1
. * 2 INTEIROS 1 DECIMAL
*-------------------------------------------------* ATIVIDADE 1
*-------------------------------------------------JOB INPUT NULL
*
MOVE 'ABCDEF' TO WRECEB
. * MOVE TUDO
DISPLAY '/' WRECEB '/'
MOVE 'ABCDEF' 3 TO WRECEB
. * MOVE 3 PRIMEIROS AA ESQ
DISPLAY '/' WRECEB '/'
MOVE 'ABCDEF' TO WRECEB 5
. * RECEBE 5
DISPLAY '/' WRECEB '/'
MOVE 'ABCDEF' 2 TO WRECEB 5
. * MOVE 2 E RECEBE 5
DISPLAY '/' WRECEB '/'
*
MOVE 'ABCDEF' TO WRECEB FILL '*' . * PREENCHE COM *
DISPLAY '/' WRECEB '/'
*MOVE 'ABCDEF' TO WRECEB FILL '*-'
* O FILL ACIMA NAO EH VALIDO. A LITERAL DEVE TER UM BYTE
*
DIVIDENDO = 2001
DIVISOR = 4
COCIENTE = DIVIDENDO / DIVISOR

EASYTRIEVE
7 Comandos de processamento b) Expresses e assinalaes
RESTO = DIVIDENDO - DIVISOR * COCIENTE
DISPLAY 'DIVIDENDO = ' DIVIDENDO
DISPLAY 'DIVISOR
= ' DIVISOR
DISPLAY 'COCIENTE = ' COCIENTE
DISPLAY 'RESTO
= ' RESTO
*
3I0D = 987
2I0D = 3I0D
DISPLAY '2I0D = ' 2I0D
3I2D = 987.65
2I1D = 3I2D
DISPLAY '2I1D = ' 2I1D
*
WALFA = 'ABC'
WBETA = '123'
WALFA = WALFA XOR WBETA
WBETA = WBETA XOR WALFA
WALFA = WALFA XOR WBETA
DISPLAY 'WALFA=' WALFA
DISPLAY 'WBETA=' WBETA
*
STOP
*-------------------------------------------------* ATIVIDADE 2
*-------------------------------------------------JOB INPUT ENTRA
MOVE ENTRA TO SAIDA
PUT SAIDA
DISPLAY 'AG-PARCIAL=' AG-PARCIAL
GO TO JOB
********************************************************
* FIM **************************************************
********************************************************
//SAIDAS
DD *
/ABCDEF
/
/ABC
/
/ABCDE
/
/AB
/
/ABCDEF**********************************/
DIVIDENDO = 000000002001
DIVISOR
= 0004
COCIENTE = 00000500
RESTO
= 0001
2I0D = 87
2I1D = 87,6
WALFA=123
WBETA=ABC
AG-PARCIAL=ALBERTO
198802290000000001
AG-PARCIAL=ZIGOMAR
200105300000000010
AG-PARCIAL=MAFALDA
200010150000000100
AG-PARCIAL=VALDICE
199912230000001000
129/05/01 9.53.32
CA-EASYTRIEVE PLUS-6.2 9606
COMPRADOR EASYTRIEVE
0PROGRAMS AND ALL SUPPORTING MATERIALS COPYRIGHT (C) 1982, 1996 BY COMPUTER
-FILE STATISTICS - CA-EASYTRIEVE PLUS 6.2 9606-29/05/01- 9.53-JSN00087
ENTRA
4
INPUT
SAM FIX
BLK
80
SAIDA
4
OUTPUT
SAM FIX
BLK
500

EASYTRIEVE
7 Comandos de processamento b) Expresses e assinalaes

c) Identificao de pontos de programa; comandos GO TO, PROC, END-PROC e PERFORM


Os pontos de uma atividade, onde h comandos a executar, podem ser identificados atravs de
um nome.
Para IDENTIFICAR uma instruo, basta atribuir um nome no local onde ela se encontra.
Se a referncia para executar um desvio, via GO TO, a identificao somente o nome da
instruo.
Se a referncia para a execuo de uma sub-rotina (chamada ou referenciada atravs de
PERFORM, DO, START, FINISH, a identificao deve ser acrescida de PROC.
O comando GO TO desvia para a instruo identificada atravs do nome indicado.
Sintaxe :
GO TO nome-instruo
O comando PERFORM executa uma procedure (ou rotina) : desvia para seu incio (instruo
identificada por uma nome, seguido de PROC), executa as instrues at o final da rotina
(identificado com END-PROC) e volta para a instruo subsequente ao PERFORM.
Sintaxe :
PERFORM nome-rotina
Os nomes referenciados no START e/ou no FINISH devem ser de rotinas delimitadas por PROC
e END-PROC.
Exemplo 023
Identificao e referncia de pontos de programa
//DS029023 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//*--------------------------------------------------------------//STEPEASY EXEC PGM=EZTPA00,PARM='PROCESSA=S'
//ENTRA
DD *
ALBERTO
198802290000000001
ZIGOMAR
200105300000000010
MAFALDA
200010150000000100
VALDICE
199912230000001000
ERRO 1
194912230000001000
ERRO 2
200212230000001000
ERRO 3
200113230000001000
ERRO 4
200100230000001000

EASYTRIEVE
7 Comandos de processamento c) GO TO , PROC, END-PROC, PERFORM
ERRO 5
200112000000001000
ERRO 6
200112320000001000
ERRO 7
200104310000001000
ERRO 8
200102290000001000
CERTO
200002290000001000
//RELAT
DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 023
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS E RESPECTIVAS AREAS DE I/O
*-------------------------------------------------FILE RELAT PRINTER
FILE ENTRA
AL
1 80 A
AL-NOME
1 15 A
AL-DATA
16 08 N
AL-SALDO
24 10 N 2
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WLL
W
7
N
WMAXDIAS
W
2
N
WORCALC
W
4
N
WERRO
W 20
A
WDATA
W
8
N
WSSAA WDATA
4
N
WSS
WDATA
2
N
WAA
WDATA
+2 2
N
WMM
WDATA
+4 2
N
WDD
WDATA
+6 2
N
*-------------------------------------------------* ATIVIDADE 1
*-------------------------------------------------JOB INPUT ENTRA START COMECAR FINISH TERMINAR
IF AL-SALDO GT 0.99
GO TO PROCESSA
ELSE
GO TO JOB
END-IF
PROCESSA
WDATA = AL-DATA
PERFORM CONSISTE-DATA
PRINT SYSREL
GO TO JOB
*------------* ROTINA DE CONSISTENCIA DE DATA
*------------CONSISTE-DATA
PROC
WERRO = 'DATA OK'

EASYTRIEVE
7 Comandos de processamento c) GO TO , PROC, END-PROC, PERFORM
IF WDATA NOT NUMERIC
WERRO = 'DATA NAO NUMERICA'
GO TO OKNOK
END-IF
IF WSSAA LT 1950 OR +
WSSAA GT 2001
WERRO = 'ANO FORA DOS LIMITES'
GO TO OKNOK
END-IF
IF WMM LT 01 OR +
WMM GT 12
WERRO = 'MES INVALIDO'
GO TO OKNOK
END-IF
IF WDD LT 01 OR +
WDD GT 31
WERRO = 'DIA INVALIDO'
GO TO OKNOK
END-IF
IF WMM EQ 01 03 05 07 08 10 12
GO TO OKNOK
END-IF
IF WMM NE 02
IF WDD GT 30
WERRO = 'DIA INVALIDO'
GO TO OKNOK
END-IF
END-IF
WORCALC INTEGER = WSSAA / 4
WORCALC = WSSAA - WORCALC * 4
IF WORCALC EQ 0
WMAXDIAS = 29
ELSE
WMAXDIAS = 28
END-IF
IF WDD GT WMAXDIAS
WERRO = 'DIA INVALIDO'
END-IF
OKNOK
END-PROC
*------------* ROTINA DE INICIALIZACAO
*------------COMECAR. PROC
DISPLAY RELAT 'COMECANDO O PROGRAMA'
END-PROC
*------------* ROTINA DE FINALIZACAO
*------------TERMINAR. PROC
DISPLAY RELAT 'TERMINANDO O PROGRAMA'
END-PROC
*------------* DECLARACAO DO RELATORIO
*------------REPORT SYSREL PRINTER RELAT NOADJUST
CONTROL FINAL

EASYTRIEVE
7 Comandos de processamento c) GO TO , PROC, END-PROC, PERFORM
TITLE 1 '
PROGRAMA EXEMPLO 023'
LINE 1 AL-NOME AL-DATA AL-SALDO WERRO
********************************************************
* FIM **************************************************
********************************************************
//SAIDAS
DD *
>>>>>>>>>>>>>>>RELAT
COMECANDO O PROGRAMA
129/05/01
PROGRAMA EXEMPLO 023
AL-NOME
AL-DATA
AL-SALDO
WERRO
0MAFALDA
20001015
1,00
DATA OK
VALDICE
19991223
10,00
DATA OK
ERRO 1
19491223
10,00
ANO FORA DOS LIMITES
ERRO 2
20021223
10,00
ANO FORA DOS LIMITES
ERRO 3
20011323
10,00
MES INVALIDO
ERRO 4
20010023
10,00
MES INVALIDO
ERRO 5
20011200
10,00
DIA INVALIDO
ERRO 6
20011232
10,00
DIA INVALIDO
ERRO 7
20010431
10,00
DIA INVALIDO
ERRO 8
20010229
10,00
DIA INVALIDO
CERTO
20000229
10,00
DATA OK
TERMINANDO O PROGRAMA
101,00

d) Comandos IF, ELSE, ELSE-IF, END-IF ; operadores relacionais


Utilizados para teste de condio, e respectivos redirecionamentos de fluxo de processamento.
A sintaxe :
IF condio
comandos se condio satisfeita
END-IF
ou
IF condio
comandos se condio satisfeita
ELSE
comandos se condio no satisfeita
END-IF
ou
IF condio
comandos se condio satisfeita
ELSE-IF condio
comandos se condio satisfeita
[ELSE-IF condio
comandos se condio satisfeita
ELSE-IF condio
comandos se condio satisfeita]
ELSE
comandos se nenhuma condio satisfeita
END-IF
Os IFs podem ser aninhados (nested), devendo haver pares correspondentes de IFs e respectivos
END-IFs; a indentao no obrigatria, apesar de facilitar a visualizao :
IF condio
(satisfeita)
IF condio
comandos se condio satisfeita
END-IF
ELSE
(no satisfeita)
IF condio
comandos se condio satisfeita
ELSE
comandos se condio no satisfeita
END-IF
END-IF

EASYTRIEVE
7 Comandos de processamento d) IF, ELSE, ELSE-IF, END-IF; Operadores relacionais

A condio pode ser especificada da seguinte forma :

Relacionamento de campos
Classes de campos
Srie de campos
Bits de campos
Presena de arquivos
Presena de srie de arquivos
Relacionamento de registros

Vejamos cada um deles.


RELACIONAMENTO DE CAMPOS
Testa como o contedo de um campo em relao ao contedo de outro campo.
Sintaxe :
IF campo |EQ|=|NE|NQ|=|LT|LS|<|LE|LQ|<=|GT|GR|>|GE|GQ|>=|
|campo|literal|expresso|

Sendo :
EQ
NE
LT
LE
GT
GE

ou
ou
ou
ou
ou
ou

=
NQ
LS
LQ
GR
GQ

ou
ou
ou
ou
ou

=
<
<=
>
>=

equal (igual)
not equal (no igual / diferente)
less than (menor que)
less or equal (menor ou igual que)
greater than (maior que)
greater or equal (maior ou igual)

Exemplos :
CLASSES DE CAMPOS
Testa se um campo tem determinada caracterstica ou no. Sintaxe :
IF campo |NOT| classe

classe podendo ser :


ALPHABETIC
NUMERIC
SPACE
SPACES
ZERO

EASYTRIEVE
7 Comandos de processamento d) IF, ELSE, ELSE-IF, END-IF; Operadores relacionais

ZEROS
ZEROES
Exemplos :
IF DATA-NASC NOT NUMERIC ...
IF NOME-CLI NOT ALPHABETIC ...
IF SALDO ZERO ...
SRIE DE CAMPOS
Testa se campo1 est ou no dentro dos limites de uma srie delimitada por desde e at, cada
qual podendo ser especificado atravs de uma literal (numrica ou alfanumrica) ou outra
varivel.
Sintaxe :
IF campo1 |EQ|=|NE|NQ|=| desde

THRU

at

Exemplos :
IF ANO-NASC EQ 1890 THRU 1990 ...
IF COD-PROD NE 001 thru 870 ...

BITS DE CAMPOS
Testa se bit(s) de um campo est(o) ou no ligado(s).
Sintaxe :
IF campo [NOT] |ON|OFF| |campo|literalhexa|

Exemplos :
IF ULTDIGANO ON X01 ...
IF BIT4567DOBYTE ON X0F ...
IF ULTDIGNRO OFF X01 ...

PRESENA DE ARQUIVOS
Testa se um registro do arquivo em referncia est ou no disponvel para processamento.
Sintaxe :

EASYTRIEVE
7 Comandos de processamento d) IF, ELSE, ELSE-IF, END-IF; Operadores relacionais

IF [NOT] [EOF]

|nome-arquivo|PRIMARY|SECONDARY|

Exemplos na parte referente ao GET e a MATCH (Exemplo 026 e 028).

PRESENA DE SRIE DE ARQUIVOS


Testa se registro(s) do arquivo tem correspondente em outro ou no.
Sintaxe :
IF [NOT]

MATCHED

|nome-arquivo|PRIMARY|SECONDARY|

Exemplos na parte referente ao MATCH (Exemplo 028).

RELACIONAMENTO DE ARQUIVOS
Testa se registro(s) do arquivo tem duplicidade (ou qual duplicidade) em outro ou no.
Sintaxe :
IF [NOT] |DUPLICATE|FIRST-DUP|LAST-DUP| |nome-arq|PRIMARY|SECONDARY|

Exemplos na parte referente ao GET e a MATCH (Exemplo 026 e 028).

Exemplos gerais sobre uso do IF / ELSE / END-IF no prximo tem, em conjunto com DO /
END-DO / CASE.

e) Comandos DO, END-DO e CASE


Sintaxe :
DO WHILE condio
(primeiro testa a condio depois, se verdadeira, executa)
.
.
END-DO
ou
DO UNTIL condio
(primeiro executa e depois testa a condio)
.
.
END-DO
A condio pode ser especificada da mesma forma como no comando IF.
Os blocos de DO / END-DO podem ser aninhados (nested); a indentao no obrigatria,
apesar de facilitar a visualizao :
DO WHILE condio
.
.
DO UNTIL condio
.
.
DO WHILE
.
.
END-DO
.
END-DO
.
.
DO WHILE condio
.
END-DO
.
.
END-DO

EASYTRIEVE
7 Comandos de processamento e) DO, END-DO, CASE

CASE nome-campo
WHEN literal [THRU] literal
.
.
.
[ WHEN literal [THRU] literal
.
.
.]
[ OTHERWISE
.
.]
END-CASE
Exemplos :
INDEXADOR = 1
DO WHILE INDEXADOR LE MAXIMO
IF CODAL EQ CODTAB(INDEXADOR)
GO TO ACHOU
ELSE
INDEXADOR = INDEXADOR + 1
END-IF
END-DO

INDEXADOR = 1
DO UNTIL INDEXADOR GE MAXIMO
IF CODAL EQ CODTAB(INDEXADOR)
GO TO ACHOU
ELSE
INDEXADOR = INDEXADOR + 1
END-IF
END-DO

CASE COD-CLI
WHEN 1 THRU 9999
PERFORM CLI-EMP-0
WHEN 10000 THRU 19999
PERFORM CLI-EMP-1
OTHERWISE
PERFORM CLI-MISC
END-CASE

EASYTRIEVE
7 Comandos de processamento e) DO, END-DO, CASE

Exemplo 024
IF, ELSE, END-IF, DO, END-DO, CASE
//DS029024 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//*--------------------------------------------------------------//STEPEASY EXEC PGM=EZTPA00,PARM='PROCESSA=S'
//ENTRA
DD *
ALBERTO
198802290000000001
ZIGOMAR
200105300000000010
MAFALDA
200010150000000100
VALDICE
199912230000001000
ERRO 1
194912230000001000
ERRO A
200212230000001000
ERRO B
200113230000001000
ERRO C
200100230000001000
ERRO D
200112000000001000
ERRO E
200112320000001000
ERRO F
200104310000001000
ERRO G
200102290000001000
CERTO
200002290000001000
200002290000001000
ABCD
200002290000001000
999999999999999200002290000001000
//RELAT
DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 024
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS E RESPECTIVAS AREAS DE I/O
*-------------------------------------------------FILE RELAT PRINTER
FILE ENTRA
AL
1 80 A
AL-NOME
1 15 A
AL-DATA
16 08 N
AL-ANO
16 04 N
AL-SALDO
24 10 N 2
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WLL
W
7
N
WDATASOK
W
4
N
WDATASNOK
W
4
N
WMAXDIAS
W
2
N
WSAL199X
W 12
N 2
WSAL1995
W 12
N 2
WSAL1996
W 12
N 2
WSAL1997
W 12
N 2
WSAL1998
W 12
N 2

EASYTRIEVE
7 Comandos de processamento e) DO, END-DO, CASE
WSAL1999
W 12
N 2
WSAL2XXX
W 12
N 2
WORCALC
W
4
N
WERRO
W 20
A
WOK WERRO
7
A
WDATA
W
8
N
WSSAA WDATA
4
N
WSS
WDATA
2
N
WAA
WDATA
+2 2
N
WMM
WDATA
+4 2
N
WDD
WDATA
+6 2
N
*-------------------------------------------------* ATIVIDADE 1
*-------------------------------------------------JOB INPUT ENTRA START COMECAR FINISH TERMINAR
IF AL-SALDO GT 0.99
GO TO PROCESSA
ELSE
GO TO JOB
END-IF
PROCESSA
WDATA = AL-DATA
*
IF
AL-ANO EQ 1999
WSAL1999 = WSAL1999 + AL-SALDO
ELSE-IF AL-ANO EQ 1998
WSAL1998 = WSAL1998 + AL-SALDO
ELSE-IF AL-ANO EQ 1997
WSAL1997 = WSAL1997 + AL-SALDO
ELSE-IF AL-ANO EQ 1996
WSAL1996 = WSAL1996 + AL-SALDO
ELSE-IF AL-ANO EQ 1995
WSAL1995 = WSAL1995 + AL-SALDO
ELSE-IF AL-ANO LE 1994
WSAL199X = WSAL199X + AL-SALDO
ELSE
WSAL2XXX = WSAL2XXX + AL-SALDO
END-IF
*
IF AL-NOME NOT ALPHABETIC
WERRO = 'NOME NAO ALFABETICO'
ELSE
PERFORM CONSISTE-DATA
END-IF
*
CASE WOK
WHEN 'DATA OK'
WDATASOK = WDATASOK + 1
OTHERWISE
WDATASNOK = WDATASNOK + 1
END-CASE
*
PRINT SYSREL
GO TO JOB
*------------* ROTINA DE CONSISTENCIA DE DATA
*-------------

EASYTRIEVE
7 Comandos de processamento e) DO, END-DO, CASE
CONSISTE-DATA
PROC
WERRO = 'DATA OK'
IF WDATA NOT NUMERIC
WERRO = 'DATA NAO NUMERICA'
GO TO OKNOK
END-IF
IF WSSAA LT 1950 OR +
WSSAA GT 2001
WERRO = 'ANO FORA DOS LIMITES'
GO TO OKNOK
END-IF
IF WMM NE 01 THRU 12
WERRO = 'MES INVALIDO'
GO TO OKNOK
END-IF
IF WDD LT 01 OR +
WDD GT 31
WERRO = 'DIA INVALIDO'
GO TO OKNOK
END-IF
IF WMM EQ 01 03 05 07 08 10 12
GO TO OKNOK
END-IF
IF WMM NE 02
IF WDD GT 30
WERRO = 'DIA INVALIDO'
GO TO OKNOK
ELSE
IF WDD GR 28
WERRO = 'DIA INVALIDO'
GO TO OKNOK
END-IF
END-IF
END-IF
WORCALC INTEGER = WSSAA / 4
WORCALC = WSSAA - WORCALC * 4
IF WORCALC EQ 0
WMAXDIAS = 29
ELSE
WMAXDIAS = 28
END-IF
IF WDD GT WMAXDIAS
WERRO = 'DIA INVALIDO'
END-IF
OKNOK
* TESTA SE ANO PAR OU NAO
IF WAA ON X'0001'
WERRO = 'DATA OK - ANO IMPAR'
END-IF
END-PROC
*------------* ROTINA DE INICIALIZACAO
*------------COMECAR. PROC
DISPLAY RELAT 'COMECANDO O PROGRAMA'
END-PROC

EASYTRIEVE
7 Comandos de processamento e) DO, END-DO, CASE
*------------* ROTINA DE FINALIZACAO
*------------TERMINAR. PROC
DISPLAY RELAT 'TERMINANDO O PROGRAMA'
DISPLAY RELAT 'DATAS OK = ' WDATASOK
DISPLAY RELAT 'DATAS NOK = ' WDATASNOK
DISPLAY RELAT 'SALDO ANTES 1995 = ' WSAL199X
DISPLAY RELAT 'SALDO
1995 = ' WSAL1995
DISPLAY RELAT 'SALDO
1996 = ' WSAL1996
DISPLAY RELAT 'SALDO
1997 = ' WSAL1997
DISPLAY RELAT 'SALDO
1998 = ' WSAL1998
DISPLAY RELAT 'SALDO
1999 = ' WSAL1999
DISPLAY RELAT 'SALDO APOS 1999 = ' WSAL2XXX
END-PROC
*------------* DECLARACAO DO RELATORIO
*------------REPORT SYSREL PRINTER RELAT NOADJUST
CONTROL FINAL
TITLE 1 '
PROGRAMA EXEMPLO 023'
LINE 1 AL-NOME AL-DATA AL-SALDO WERRO
********************************************************
* FIM **************************************************
********************************************************
//SAIDAS
DD *
>>>>>>>>>>>>>>>RELAT
COMECANDO O PROGRAMA
130/05/01
PROGRAMA EXEMPLO 023
AL-NOME
AL-DATA
AL-SALDO
WERRO
0MAFALDA
20001015
1,00
DATA OK
VALDICE
19991223
10,00
DATA OK - ANO IMPAR
ERRO 1
19491223
10,00
NOME NAO ALFABETICO
ERRO A
20021223
10,00
ANO FORA DOS LIMITES
ERRO B
20011323
10,00
DATA OK - ANO IMPAR
ERRO C
20010023
10,00
DATA OK - ANO IMPAR
ERRO D
20011200
10,00
DATA OK - ANO IMPAR
ERRO E
20011232
10,00
DATA OK - ANO IMPAR
ERRO F
20010431
10,00
DATA OK - ANO IMPAR
ERRO G
20010229
10,00
DATA OK - ANO IMPAR
CERTO
20000229
10,00
DATA OK
20000229
10,00
DATA OK
ABCD
20000229
10,00
DATA OK
999999999999999
20000229
10,00
NOME NAO ALFABETICO
TERMINANDO O PROGRAMA
DATAS OK = 0011
DATAS NOK = 0003
SALDO ANTES 1995 =
10,00
SALDO
1995 =
,00
SALDO
1996 =
,00
SALDO
1997 =
,00
SALDO
1998 =
,00
SALDO
1999 =
10,00
SALDO APOS 1999 =
111,00
131,00

EASYTRIEVE
7 Comandos de processamento e) DO, END-DO, CASE

8 - Statement REPORT e complementares


O statement REPORT declara as caractersticas de um relatrio e as linhas que iro compo-lo.
Ele tem diversas clusulas, e, alm disso, associadas a ele existem outras declarativas que
complementam as especificaes das caractersticas.
a) Comando PRINT
Para a impresso de linhas de detalhe em um relatrio, deve ser utilizado o comando PRINT :
PRINT nome-relatorio
A impresso das demais linhas feita de forma automtica pelo EASY.
b) Statement REPORT
A sintaxe bsica do REPORT e statements complementares :
REPORT nome-relatrio [clusulas do REPORT]
[statements complementares]
c) Statements complementares ao REPORT : resumo
SEQUENCE para indicar a sequncia de impresso das linhas de detalhe
CONTROL para indicar os campos de controle de quebra
SUM para indicar os campos a totalizar
TITLE para declarar as linhas de cabealho
HEADING para declarar as constantes identificadoras dos campos listados
LINE para declarar as linhas de detalhe
procedures para declarar procedimentos que so invocados pelo Easy automaticamente em
eventos relacionados impresso do relatrio
As procedures podem ser :
REPORT-INPUT para selecionar e/ou modificar dados do relatrio
BEFORE-LINE para algum procedimento aps a linha de detalhe ser montada, antes de ser
impressa
AFTER-LINE para algum procedimento aps a linha de detalhe impressa
BEFORE-BREAK para algum procedimento aps a linha de total ser montada, antes de ser
impressa
AFTER-BREAK para algum procedimento aps a linha de total ser impressa
ENDPAGE para imprimir linhas de rodap
TERMINATION para algum procedimento aps o trmino da impresso do relatrio

d) componentes de um relatrio
Os componentes de um relatrio podem ser exemplificados da seguinte forma :

rgua para simples referncia


data controlada por NODATE

literal controlada
pelo PARM PAGEWRD

.... 1
1
1
2
3
4
5 .... 2
3
123456789012345678901234567890123456789012345678901....90123456789012

18/05/01
AL-NOME
ALBERTO
ZIGOMAR
MAFALDA
VALDICE

PROGRAMA EXEMPLO 001


AL-DATA

.... PAGINA

AL-SALDO

19880229
20010530
20001015
19991223

,01
,10
1,00
10,00
11,11

linha de total (controlada pelo CONTROL)


linhas de detalhe (controlada pelo(s) LINE(s)
linha (de cabealho) identificadora dos campos (controlada pelos HEADINGs)
linha de cabealho (controlada pelo(s) TITLE(s))

e) estrutura do REPORT
A estrutura para a declarao do REPORT, suas caractersticas e procedimentos correlatos, a
seguinte (a especificao deve ser feita na ordem indicada):
PARM
declarao arquivos
declarao variveis
JOB.....
...
.
*---------------------REPORT
SEQUENCE
CONTROL
SUM
TITLE
HEADING
LINE
*-----------------REPORT-INPUT. PROC
...
END-PROC
*-----------------BEFORE-LINE. PROC
...
END-PROC
*-----------------AFTER-LINE. PROC
...
END-PROC
*-----------------BEFORE-BREAK. PROC
...
END-PROC
*-----------------AFTER-BREAK. PROC
...
END-PROC
*-----------------ENDPAGE. PROC
...
END-PROC
*-----------------TERMINATION. PROC
...
END-PROC
*------------------

f) Clusulas do REPORT

EASYTRIEVE
8 Statement Report; e) Estrutura do Report

REPORT nome-relatorio
[SUMMARY]
[SUMFILE]
[SUMSPACE]
[TALLYSIZE]
[DTLCTL |EVERY|FIRST|NONE|]
[SUMCTL ([x] [y])]
[LABELS [ACROSS literal] ]
[DOWN literal SIZE literal NEWPAGE]
[FILE nome-arquivo]
[PRINTER nome-arquivo]
[PAGESIZE literal literal]
[LINESIZE literal]
[SKIP literal]
[SPACE literal]
[TITLESKIP literal]
[| SPREAD | NOSPREAD |]
[NOADJUST]
[| NODATE | NOKDATE |]
[| NOPAGE | NOKPAGE |]
[NOHEADING]
[LIMIT literal]
[EVERY literal]

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

Sendo :
nome-relatorio
SUMMARY
SUMSPACE literal

TALLYSIZE
DTLCTL |EVERY|FIRST|NONE|

SUMCTL ([x] [y])

nome para referncia no PRINT ou DISPLAY. Pode haver


n relatrios para cada FILE (DD)
devem ser impressos somente os totais especificados na
clusula CONTROL
indica o tamanho para impresso dos campos de total. O nro
especificado atravs da literal somado ao tamanho (em
dgitos) do campo para determinar o tamanho do campo de
total (mximo possvel resultante = 18)
indica o tamanho do campo TALLY do relatrio (existe um
TALLY para cada REPORT)
indica caractersticas das linhas de detalhe.
EVERY indica que o contedo dos campos de controle
deve ser impresso em todas as linhas de detalhe
FIRST indica que o contedo dos campos de contrile deve
ser impresso sempre na primeira linha de detalhe de cada
pgian , e na primeira linha aps cada quebra de controle.
NONE indica que os campos de controle no devem ser
impressos nas linhas de detalhe.
indica caractersticas das linhas de total.
x pode ser :
ALL = campos de controle devem ser impressos em

EASYTRIEVE
8 Statement Report; e) Estrutura do Report

FILE nome-arquivo
PRINTER nome-arquivo
PAGESIZE literal1 literal2
LINESIZE literal
SKIP literal
SPACE literal
TITLESKIP literal
| SPREAD | NOSPREAD |
NOADJUST
NODATE
NOPAGE
NOHEADING
LIMIT literal
EVERY literal

todas as linhas de total


HIAR = imprimir somente os campos de controle de
mesmo nvel, ou de nvel mais alto
NONE = no imprimir campos de controle nas linhas de
total
TAG = deve ser impresso o nome do campo de total
esquerda da linha de total (deve haver espao suficiente)
y pode ser :
DTLCOPY = imprimir variveis de detalhe nas linhas de
total, se LEVEL=1
DTLCOPYALL = idem, para todos os LEVEL
Indica o nome do arquivo para relatrios muito grandes (o
VFM insuficiente)
Indica o nome do FILE a ser utilizado por este REPORT
Modifica o tamanho mximo, em linhas, da pgina.
literal1 aplica-se s linhas de LINE
literal2 aplica-se aos DISPLAYS
Modifica o tamanho mximo, em bytes, das linhas.
Indica o nmero de linhas em branco entre um PRINT e
outro (entre um LINE nn e o prximo LINE 01
Coloca tantos espaos em branco entre um campo e outro,
quanto especificado na literal. Assume 3.
Indica o nmero de linhas em branco entre a ltima linha de
cabealho geral e a primeira de cabealho identificador dos
campos
Default SPREAD. Espalha os dados na linha de detalhe,
centralizando.
Vai colocando os dados nas linhas de detalhe da esquerda
para a direita. Se omitido, centraliza na linha.
Faz com que NO seja impressa a data do dia na primeira
linha de cabealho
Faz com que NO sejam impressas a constante
identificadora de pgina, e o nmero da pgina, nas linhas
de cabealho
Faz com que NO seja(m) impressa(s) a(s) linha(s) de
cabealho identificadora(s) d(s) campo(s)
indica o nmero mximo de registros a processar no
relatrio
indica que deve ser impressa somente 1 linha a cada n
PRINTs. Se especificar EVERY 10 e forem dados 1000
PRINTs para 1000 registros de um arquivo, somente os
registros 10, 20, 30 ... sero impressos

g) Statements complementares ao REPORT : detalhes


SEQUENCE campo1 [D] campo2 [D] ...
Indica a ordem (campo ou campos chave) com que as linhas devem ser impressas.
Especificar D se a sequncia for decrescente (o default crescente).
CONTROL | campo1 [D] campo2 [D] ... | FINAL |
| NEWPAGE | RENUM |
NOPRINT
Indica em qual(is) quebra(s) deve(m) ser impressa(s) a(s) linha(s) de total.
Se algum campo for especificado, a linha de total final tambm ser impressa.
FINAL indica para imprimir s a linha de total final.
SUM campo1 [campo2 ... campon]
Indica quais os campos numricos que devem ser totalizados. Devem ter especificao da
quantidade de decimais na sua declarao (se necessrio, colocar zero; caso contrrio, ocorrer
erro de compilao).
TITLE nrolin |campo|literal
nrolin

|+nro|-nro|

COL nro

= nmero da linha de cabealho

|campo|literal| = contedo a ser impresso


+nro -nro

= o nro especificado somado ou subtraido do valor de SPACE para


indicar quantos espaos em branco so desejados entre o campo anterior e
o atual

COL nro

= indica o nmero da coluna em que se deseja colocar o prximo campo

HEADING campo (xxx [yyy ...])


Indica a constante que deve identificar um campo nas linhas de cabealho que os identificam.
Cada literal colocada numa linha.
Pode-se especificar colocando em sequncia, ou separadamente, indicando o nmero da linha.

EASYTRIEVE
8 Statement Report; g) Statements complementares - detalhes

LINE nrolin |campo|literal


nrolin

|+nro|-nro|

|COL|POS| nro

= nmero da linha de cabealho

|campo|literal| = contedo a ser impresso


+nro -nro

= o nro especificado somado ou subtraido do valor de SPACE para


indicar quantos espaos em branco so desejados entre o campo anterior e
o atual

COL nro

= indica o nmero da coluna em que se deseja colocar o prximo campo

POS nro

= indica o nmero do tem da LINE 01 na direo do qual o campo sendo


especificado deve ser colocado

Nos exemplos a seguir, a no ser quando especificado em contrrio, sero sempre colocadas as
clusulas NOADJUST e SPACE 1 para que a parte significativa do relatrio possa ser
visualizada mesmo sendo exibidas somente as 7 primeiras posies.
Exemplo 025
REPORTS
//DS029025 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//*--------------------------------------------------------------//STEPEASY EXEC PGM=EZTPA00
//ENTRA
DD *
ALBERTO
19880229 0000010001 00100 012 006
ALBERTO
19880229 0000010001 00100 012 006
ZIGOMAR
20010530 0000000010 00020 123 012
ZIGOMAR
20010530 0000000010 00020 123 012
MAFALDA
20001015 0000000100 00340 456 024
MAFALDA
20001015 0000000100 00340 456 024
VALDICE
19991223 0000001000 05678 789 036
VALDICE
19991223 0000001000 05678 789 036
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 025
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS E RESPECTIVAS AREAS DE I/O
*-------------------------------------------------FILE SYSREL PRINTER
FILE ENTRA
AL
1 80 A
AL-NOME
1 15 A
AL-DATA
16 08 N
AL-VTOT
25 10 N 2
AL-VUNI
36 5 N 2
AL-COD
42 3 N
AL-QPACOT
46 3 N 0

EASYTRIEVE
8 Statement Report; g) Statements complementares - detalhes
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WLL
W
7
N
WII
W
7
N
*-------------------------------------------------* DECLARACAO DE PROCEDIMENTOS
*-------------------------------------------------*------------* ROTINA PRINCIPAL
*------------JOB INPUT ENTRA FINISH ESTATIS
WLL = WLL + 1
PRINT RELAT01
PRINT RELAT02
PRINT RELAT03
PRINT RELAT04
PRINT RELAT05
PRINT RELAT06
PRINT RELAT07
PRINT RELAT08
PRINT RELAT09
PRINT RELAT10
PRINT RELAT11
PRINT RELAT12
PRINT RELAT13
PRINT RELAT14
PRINT RELAT15
PRINT RELAT16
PRINT RELAT17
GO TO JOB
*------------* ROTINA DE FINALIZACAO
*------------ESTATIS. PROC
DISPLAY '************************************'
DISPLAY 'COPIA OK ! '
DISPLAY '************************************'
END-PROC
*------------* DECLARACAO DO RELATORIO 01
*------------REPORT RELAT01 PRINTER SYSREL NOADJUST SPACE 1
TITLE 1 '
PROGRAMA EXEMPLO 025 RELAT01'
LINE 1 AL-NOME AL-DATA AL-VTOT AL-VUNI AL-COD AL-QPACOT
*------------* DECLARACAO DO RELATORIO 02
*------------REPORT RELAT02 PRINTER SYSREL NOADJUST SPACE 1
CONTROL FINAL
TITLE 1 '
PROGRAMA EXEMPLO 025 RELAT02'
LINE 1 AL-NOME AL-DATA AL-VTOT AL-VUNI AL-COD AL-QPACOT
*------------* DECLARACAO DO RELATORIO 03
*------------REPORT RELAT03 PRINTER SYSREL NOADJUST SPACE 1
SEQUENCE AL-VTOT

EASYTRIEVE
8 Statement Report; g) Statements complementares - detalhes
TITLE 1 '
PROGRAMA EXEMPLO 025 RELAT03'
LINE 1 AL-NOME AL-DATA AL-VTOT AL-VUNI AL-COD AL-QPACOT
*------------* DECLARACAO DO RELATORIO 04
*------------REPORT RELAT04 PRINTER SYSREL NOADJUST SPACE 1
SEQUENCE AL-VTOT D
CONTROL FINAL
TITLE 1 '
PROGRAMA EXEMPLO 025 RELAT04'
LINE 1 AL-NOME AL-DATA AL-VTOT AL-VUNI AL-COD AL-QPACOT
*------------* DECLARACAO DO RELATORIO 05
*------------REPORT RELAT05 PRINTER SYSREL NOADJUST SPACE 1 SUMMARY
CONTROL FINAL
TITLE 1 '
PROGRAMA EXEMPLO 025 RELAT05'
LINE 1 AL-NOME AL-DATA AL-VTOT AL-VUNI AL-COD AL-QPACOT
*------------* DECLARACAO DO RELATORIO 06
*------------REPORT RELAT06 PRINTER SYSREL NOADJUST SPACE 1 NODATE
CONTROL FINAL
SUM
AL-QPACOT
TITLE 1 'PROGRAMA EXEMPLO 025 RELAT06'
LINE 1 AL-NOME AL-DATA AL-VTOT AL-VUNI AL-COD AL-QPACOT
*------------* DECLARACAO DO RELATORIO 07
*------------REPORT RELAT07 PRINTER SYSREL NOADJUST SPACE 1
CONTROL FINAL
TITLE 1 'PROGRAMA EXEMPLO 025 RELAT07'
TITLE 2 '----------------------------'
LINE 1 AL-NOME AL-DATA AL-VTOT AL-VUNI AL-COD AL-QPACOT
*------------* DECLARACAO DO RELATORIO 08
*------------REPORT RELAT08 PRINTER SYSREL NOADJUST SPACE 1
CONTROL FINAL
TITLE 1 '
PROGRAMA EXEMPLO 025 RELAT08'
TITLE 2 '
----------------------------'
HEADING AL-NOME ('NOME' 'PESSOA')
HEADING AL-DATA ('DATA' 'CADAST')
HEADING AL-VTOT ('VALOR' 'TOTAL' '-----')
HEADING AL-VUNI ('VALOR' 'UNITARIO')
LINE 1 AL-NOME AL-DATA AL-VTOT AL-VUNI
*------------* DECLARACAO DO RELATORIO 09
*------------REPORT RELAT09 PRINTER SYSREL NOADJUST SPACE 1
CONTROL FINAL
TITLE 1 '
PROGRAMA EXEMPLO 025 RELAT09'
LINE 1 'AL-NOME
= ' AL-NOME
LINE 2 'AL-DATA
= ' AL-DATA
LINE 3 'AL-VTOT
= ' AL-VTOT
LINE 4 'AL-VUNI
= ' AL-VUNI
LINE 5 'AL-COD
= ' AL-COD
LINE 6 'AL-QPACOT = ' AL-QPACOT

EASYTRIEVE
8 Statement Report; g) Statements complementares - detalhes
LINE 7 '--------------------------------'
*------------* DECLARACAO DO RELATORIO 10
*------------REPORT RELAT10 PRINTER SYSREL NOADJUST SPACE 1 NOHEADING
CONTROL FINAL
TITLE 1 '
PROGRAMA EXEMPLO 025 RELAT10'
LINE 1 'AL-NOME
= ' AL-NOME
LINE 2 'AL-VTOT
= ' AL-VTOT
*------------* DECLARACAO DO RELATORIO 11
*------------REPORT RELAT11 PRINTER SYSREL NOADJUST SPACE 1
CONTROL FINAL
TITLE 1 '
PROGRAMA EXEMPLO 025 RELAT11'
LINE 1 AL-NOME AL-DATA AL-VTOT AL-VUNI AL-COD AL-QPACOT
*------------REPORT-INPUT. PROC
IF AL-NOME NE 'ALBERTO'
SELECT
END-IF
END-PROC
*------------* DECLARACAO DO RELATORIO 12
*------------REPORT RELAT12 PRINTER SYSREL NOADJUST SPACE 1
CONTROL FINAL
TITLE 1 '
PROGRAMA EXEMPLO 025 RELAT12'
LINE 1 AL-NOME AL-DATA AL-VTOT AL-VUNI AL-COD AL-QPACOT
*------------BEFORE-LINE. PROC
IF AL-DATA LT 20001231
DISPLAY '*** VERIFICAR DATA !!!'
END-IF
END-PROC
*------------* DECLARACAO DO RELATORIO 13
*------------REPORT RELAT13 PRINTER SYSREL NOADJUST SPACE 1
CONTROL FINAL
TITLE 1 '
PROGRAMA EXEMPLO 025 RELAT13'
LINE 1 AL-NOME AL-DATA AL-VTOT AL-VUNI AL-COD AL-QPACOT
*------------AFTER-LINE. PROC
IF AL-DATA LT 20001231
DISPLAY '*** VERIFICAR DATA !!!'
END-IF
END-PROC
*------------* DECLARACAO DO RELATORIO 14
*------------REPORT RELAT14 PRINTER SYSREL NOADJUST SPACE 1
SEQUENCE AL-NOME
CONTROL AL-NOME
TITLE 1 '
PROGRAMA EXEMPLO 025 RELAT14'
LINE 1 AL-NOME AL-DATA AL-VTOT AL-VUNI AL-COD AL-QPACOT
*-------------

EASYTRIEVE
8 Statement Report; g) Statements complementares - detalhes
BEFORE-BREAK. PROC
IF LEVEL EQ 1
DISPLAY 'VAI IMPRIMIR QUEBRA NIVEL 1'
ELSE
DISPLAY 'VAI IMPRIMIR QUEBRA NIVEL 2'
END-IF
END-PROC
*------------* DECLARACAO DO RELATORIO 15
*------------REPORT RELAT15 PRINTER SYSREL NOADJUST SPACE 1
SEQUENCE AL-NOME
CONTROL AL-NOME
TITLE 1 '
PROGRAMA EXEMPLO 025 RELAT15'
LINE 1 AL-NOME AL-DATA AL-VTOT AL-VUNI AL-COD AL-QPACOT
*------------AFTER-BREAK. PROC
IF LEVEL EQ 1
DISPLAY 'IMPRIMIU QUEBRA NIVEL 1'
ELSE
DISPLAY 'IMPRIMIU QUEBRA NIVEL 2'
END-IF
END-PROC
*------------* DECLARACAO DO RELATORIO 16
*------------REPORT RELAT16 PRINTER SYSREL NOADJUST SPACE 1
SEQUENCE AL-NOME
CONTROL AL-NOME
TITLE 1 '
PROGRAMA EXEMPLO 025 RELAT16'
LINE 1 AL-NOME AL-DATA AL-VTOT AL-VUNI AL-COD AL-QPACOT
*------------ENDPAGE. PROC
DISPLAY '------------- RODAPEH ---------------'
END-PROC
*------------* DECLARACAO DO RELATORIO 17
*------------REPORT RELAT17 PRINTER SYSREL NOADJUST SPACE 1
SEQUENCE AL-NOME
CONTROL AL-NOME
TITLE 1 '
PROGRAMA EXEMPLO 025 RELAT17'
LINE 1 AL-NOME AL-DATA AL-VTOT AL-VUNI AL-COD AL-QPACOT
*------------TERMINATION. PROC
DISPLAY '-X-X-X-X-X-X-X-X- FIM DO RELAT17 -X-X-X-X-X-X-X-X-'
END-PROC
********************************************************
* FIM **************************************************
********************************************************
//SYSREL
DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//SAIDAS
DD *
129/05/01
PROGRAMA EXEMPLO 025 RELAT01

EASYTRIEVE
8 Statement Report; g) Statements complementares - detalhes
-

AL-NOME
0ALBERTO
ALBERTO
ZIGOMAR
ZIGOMAR
MAFALDA
MAFALDA
VALDICE
VALDICE
129/05/01
AL-NOME
0ALBERTO
ALBERTO
ZIGOMAR
ZIGOMAR
MAFALDA
MAFALDA
VALDICE
VALDICE
129/05/01
AL-NOME
0ZIGOMAR
ZIGOMAR
MAFALDA
MAFALDA
VALDICE
VALDICE
ALBERTO
ALBERTO
129/05/01
AL-NOME
0ALBERTO
ALBERTO
VALDICE
VALDICE
MAFALDA
MAFALDA
ZIGOMAR
ZIGOMAR

AL-DATA
AL-VTOT
AL-VUNI AL-COD AL-QPACOT
19880229
100,01
1,00
012
6
19880229
100,01
1,00
012
6
20010530
,10
,20
123
12
20010530
,10
,20
123
12
20001015
1,00
3,40
456
24
20001015
1,00
3,40
456
24
19991223
10,00
56,78
789
36
19991223
10,00
56,78
789
36
PROGRAMA EXEMPLO 025 RELAT02
AL-DATA
19880229
19880229
20010530
20010530
20001015
20001015
19991223
19991223

AL-VTOT
AL-VUNI
100,01
1,00
100,01
1,00
,10
,20
,10
,20
1,00
3,40
1,00
3,40
10,00
56,78
10,00
56,78
222,22
122,76
PROGRAMA EXEMPLO 025 RELAT03

AL-COD AL-QPACOT
012
6
012
6
123
12
123
12
456
24
456
24
789
36
789
36
156

AL-DATA
AL-VTOT
AL-VUNI AL-COD AL-QPACOT
20010530
,10
,20
123
12
20010530
,10
,20
123
12
20001015
1,00
3,40
456
24
20001015
1,00
3,40
456
24
19991223
10,00
56,78
789
36
19991223
10,00
56,78
789
36
19880229
100,01
1,00
012
6
19880229
100,01
1,00
012
6
PROGRAMA EXEMPLO 025 RELAT04
AL-DATA
19880229
19880229
19991223
19991223
20001015
20001015
20010530
20010530

AL-VTOT
AL-VUNI
100,01
1,00
100,01
1,00
10,00
56,78
10,00
56,78
1,00
3,40
1,00
3,40
,10
,20
,10
,20
222,22
122,76
PROGRAMA EXEMPLO 025 RELAT05

AL-COD AL-QPACOT
012
6
012
6
789
36
789
36
456
24
456
24
123
12
123
12
156

129/05/01
AL-NOME
AL-DATA
AL-VTOT
AL-VUNI
AL-COD AL-QPACOT
0
222,22
122,76
156
1PROGRAMA EXEMPLO 025 RELAT06
AL-NOME
AL-DATA
AL-VTOT
AL-VUNI AL-COD AL-QPACOT
0ALBERTO
19880229
100,01
1,00
012
6
ALBERTO
19880229
100,01
1,00
012
6
ZIGOMAR
20010530
,10
,20
123
12
ZIGOMAR
20010530
,10
,20
123
12
MAFALDA
20001015
1,00
3,40
456
24

EASYTRIEVE
8 Statement Report; g) Statements complementares - detalhes
MAFALDA
VALDICE
VALDICE

20001015
19991223
19991223

1,00
10,00
10,00

3,40
56,78
56,78

456
789
789

129/05/01 EXEMPLO 025 RELAT07


---------------------------AL-NOME
AL-DATA
0ALBERTO
19880229
ALBERTO
19880229
ZIGOMAR
20010530
ZIGOMAR
20010530
MAFALDA
20001015
MAFALDA
20001015
VALDICE
19991223
VALDICE
19991223
129/05/01
NOME
PESSOA
0ALBERTO
ALBERTO
ZIGOMAR
ZIGOMAR
MAFALDA
MAFALDA
VALDICE
VALDICE
129/05/01
-

AL-VTOT
AL-VUNI
100,01
1,00
100,01
1,00
,10
,20
,10
,20
1,00
3,40
1,00
3,40
10,00
56,78
10,00
56,78
222,22
122,76
PROGRAMA EXEMPLO 025 RELAT08
---------------------------VALOR
TOTAL
VALOR
----UNITARIO
100,01
1,00
100,01
1,00
,10
,20
,10
,20
1,00
3,40
1,00
3,40
10,00
56,78
10,00
56,78
222,22
122,76
PROGRAMA EXEMPLO 025 RELAT09

DATA
CADAST
19880229
19880229
20010530
20010530
20001015
20001015
19991223
19991223

AL-NOME
0AL-NOME
= ALBERTO
AL-DATA
= 19880229
AL-VTOT
=
100,01
AL-VUNI
=
1,00
AL-COD
= 012
AL-QPACOT =
6
-------------------------------AL-NOME
= ALBERTO
AL-DATA
= 19880229
AL-VTOT
=
100,01
AL-VUNI
=
1,00
AL-COD
= 012
AL-QPACOT =
6
-------------------------------AL-NOME
= ZIGOMAR
AL-DATA
= 20010530
AL-VTOT
=
,10
AL-VUNI
=
,20
AL-COD
= 123
AL-QPACOT =
12
-------------------------------AL-NOME
= ZIGOMAR

24
36
36
156

AL-COD AL-QPACOT
012
6
012
6
123
12
123
12
456
24
456
24
789
36
789
36
156

EASYTRIEVE
8 Statement Report; g) Statements complementares - detalhes
AL-DATA
= 20010530
AL-VTOT
=
,10
AL-VUNI
=
,20
AL-COD
= 123
AL-QPACOT =
12
-------------------------------AL-NOME
= MAFALDA
AL-DATA
= 20001015
AL-VTOT
=
1,00
AL-VUNI
=
3,40
AL-COD
= 456
AL-QPACOT =
24
-------------------------------AL-NOME
= MAFALDA
AL-DATA
= 20001015
AL-VTOT
=
1,00
AL-VUNI
=
3,40
AL-COD
= 456
AL-QPACOT =
24
-------------------------------AL-NOME
= VALDICE
AL-DATA
= 19991223
AL-VTOT
=
10,00
AL-VUNI
=
56,78
AL-COD
= 789
AL-QPACOT =
36
-------------------------------AL-NOME
= VALDICE
AL-DATA
= 19991223
AL-VTOT
=
10,00
129/05/01
PROGRAMA EXEMPLO 025 RELAT09
AL-NOME
0AL-VUNI
=
56,78
AL-COD
= 789
AL-QPACOT =
36
-------------------------------222,22
122,76
0
156
129/05/01
PROGRAMA EXEMPLO 025 RELAT10
AL-NOME
= ALBERTO
AL-VTOT
=
100,01
AL-NOME
= ALBERTO
AL-VTOT
=
100,01
AL-NOME
= ZIGOMAR
AL-VTOT
=
,10
AL-NOME
= ZIGOMAR
AL-VTOT
=
,10
AL-NOME
= MAFALDA
AL-VTOT
=
1,00
AL-NOME
= MAFALDA
AL-VTOT
=
1,00
AL-NOME
= VALDICE
AL-VTOT
=
10,00
AL-NOME
= VALDICE

EASYTRIEVE
8 Statement Report; g) Statements complementares - detalhes
AL-VTOT
=
0
129/05/01
AL-NOME
0ZIGOMAR
ZIGOMAR
MAFALDA
MAFALDA
VALDICE
VALDICE

10,00
222,22
PROGRAMA EXEMPLO 025 RELAT11
AL-DATA
20010530
20010530
20001015
20001015
19991223
19991223

AL-VTOT

129/05/01
AL-NOME
0*** VERIFICAR
ALBERTO
*** VERIFICAR
ALBERTO
ZIGOMAR
ZIGOMAR
*** VERIFICAR
MAFALDA
*** VERIFICAR
MAFALDA
*** VERIFICAR
VALDICE
*** VERIFICAR
VALDICE

AL-DATA
DATA !!!
19880229
DATA !!!
19880229
20010530
20010530
DATA !!!
20001015
DATA !!!
20001015
DATA !!!
19991223
DATA !!!
19991223

AL-VTOT

129/05/01
AL-NOME
0ALBERTO
*** VERIFICAR
ALBERTO
*** VERIFICAR
ZIGOMAR
ZIGOMAR
MAFALDA
*** VERIFICAR
MAFALDA
*** VERIFICAR
VALDICE
*** VERIFICAR
VALDICE
*** VERIFICAR

AL-DATA
19880229
DATA !!!
19880229
DATA !!!
20010530
20010530
20001015
DATA !!!
20001015
DATA !!!
19991223
DATA !!!
19991223
DATA !!!

AL-VTOT
100,01

AL-VUNI
1,00

100,01

1,00

012

,10
,10
1,00

,20
,20
3,40

123
123
456

12
12
24

1,00

3,40

456

24

10,00

56,78

789

36

10,00

56,78

789

36

129/05/01
AL-NOME
0ALBERTO

AL-VUNI
,10
,20
,10
,20
1,00
3,40
1,00
3,40
10,00
56,78
10,00
56,78
22,20
120,76
PROGRAMA EXEMPLO 025 RELAT12
AL-VUNI

AL-COD AL-QPACOT
123
12
123
12
456
24
456
24
789
36
789
36
144
AL-COD AL-QPACOT

100,01

1,00

012

100,01
,10
,10

1,00
,20
,20

012
123
123

6
12
12

1,00

3,40

456

24

1,00

3,40

456

24

10,00

56,78

789

36

10,00
56,78
222,22
122,76
PROGRAMA EXEMPLO 025 RELAT13

789

36
156

AL-COD AL-QPACOT
012
6

222,22
122,76
PROGRAMA EXEMPLO 025 RELAT14

AL-DATA
19880229
19880229
VAI IMPRIMIR QUEBRA NIVEL 1
ALBERTO
0MAFALDA
20001015
20001015

AL-VTOT
100,01
100,01

AL-VUNI
1,00
1,00

200,02
1,00
1,00

2,00
3,40
3,40

156
AL-COD AL-QPACOT
012
6
012
6
456
456

12
24
24

EASYTRIEVE
8 Statement Report; g) Statements complementares - detalhes
VAI IMPRIMIR QUEBRA NIVEL
MAFALDA
0VALDICE
19991223
19991223
VAI IMPRIMIR QUEBRA NIVEL
VALDICE
0ZIGOMAR
20010530
20010530
VAI IMPRIMIR QUEBRA NIVEL
ZIGOMAR
0VAI IMPRIMIR QUEBRA NIVEL
129/05/01
AL-NOME
0ALBERTO

2,00
10,00
10,00

6,80
56,78
56,78

789
789

48
36
36

20,00
,10
,10

113,56
,20
,20

123
123

72
12
12

,20

,40

24

222,22
122,76
PROGRAMA EXEMPLO 025 RELAT15

156

AL-DATA
19880229
19880229

1
2

AL-VTOT
100,01
100,01
200,02

AL-VUNI
1,00
1,00
2,00

ALBERTO
IMPRIMIU QUEBRA NIVEL 1
0MAFALDA
20001015
1,00
3,40
20001015
1,00
3,40
MAFALDA
2,00
6,80
IMPRIMIU QUEBRA NIVEL 1
0VALDICE
19991223
10,00
56,78
19991223
10,00
56,78
VALDICE
20,00
113,56
IMPRIMIU QUEBRA NIVEL 1
0ZIGOMAR
20010530
,10
,20
20010530
,10
,20
ZIGOMAR
,20
,40
IMPRIMIU QUEBRA NIVEL 1
0
222,22
122,76
IMPRIMIU QUEBRA NIVEL 2
129/05/01
PROGRAMA EXEMPLO 025 RELAT16
AL-NOME
AL-DATA
AL-VTOT
AL-VUNI
0ALBERTO
19880229
100,01
1,00
19880229
100,01
1,00
ALBERTO
200,02
2,00
0MAFALDA
20001015
1,00
3,40
20001015
1,00
3,40
MAFALDA
2,00
6,80
0VALDICE
19991223
10,00
56,78
19991223
10,00
56,78
VALDICE
20,00
113,56
0ZIGOMAR
20010530
,10
,20
20010530
,10
,20
ZIGOMAR
,20
,40
0
222,22
122,76
-

AL-COD AL-QPACOT
012
6
012
6
12
456
456

24
24
48

789
789

36
36
72

123
123

12
12
24
156

AL-COD AL-QPACOT
012
6
012
6
12
456
24
456
24
48
789
36
789
36
72
123
12
123
12
24
156

EASYTRIEVE
8 Statement Report; g) Statements complementares - detalhes
-------------- RODAPEH --------------129/05/01
PROGRAMA EXEMPLO 025 RELAT17
AL-NOME
AL-DATA
AL-VTOT
AL-VUNI
0ALBERTO
19880229
100,01
1,00
19880229
100,01
1,00
ALBERTO
200,02
2,00
0MAFALDA
20001015
1,00
3,40
20001015
1,00
3,40
MAFALDA
2,00
6,80
0VALDICE
19991223
10,00
56,78
19991223
10,00
56,78
VALDICE
20,00
113,56
0ZIGOMAR
20010530
,10
,20
20010530
,10
,20
ZIGOMAR
,20
,40
0
222,22
122,76
0-X-X-X-X-X-X-X-X- FIM DO RELAT17 -X-X-X-X-X-X-X-X-

AL-COD AL-QPACOT
012
6
012
6
12
456
24
456
24
48
789
36
789
36
72
123
12
123
12
24
156

9 - Comandos de I/O
a) Comando DISPLAY
Para exibir constantes e/ou variveis na SYSPRINT ou outro DD. Sintaxe :
DISPLAY [HEX] nome-relatorio | lit1 | var1 |

[ ... | litn | varn | ]

Se nome do relatrio for omitido, ser assumida impresso no DD SYSPRINT.


Se for especificado, colocar o nome declarado na clusula FILE.
Exemplos :
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY

REG DELETADOS = CONT-DEL


ERRO ! PGM CANCELADO.
HEX REG-CTL
RELVEND ******* FIM *********
CADCLI:FILE-STATUS

b) Comando GET
Para efetuar a leitura sequencial de um registro lgico, em arquivos SAM ou VSAM.
Sintaxe :
GET nome-arquivo [STATUS]

STATUS aplica-se somente para arquivos VSAM.


Status 4 = EOF; Status 8 = existem registros com mesma chave em ndice alternado
c) Comando PUT
Para efetuar a gravao sequencial de um registro lgico em arquivos SAM ou VSAM.
Sintaxe :
PUT nome-arquivo [ FROM | nome-arquivo | nome-reg | ] [STATUS]

FROM indica de qual arquivo ou rea de I/O o registro a ser gravado deve ser copiado.
STATUS aplica-se somente para arquivos VSAM.
Status 8 = chave duplicada; Status 12 = chave fora de sequncia

EASYTRIEVE
9 Comandos de I/O a) Display b) Get c) Put

d) Comando POINT
Para efetuar o posicionamento de um arquivo VSAM num determinado ponto de seus registros.
IMPORTANTE : o registro somente fica disponvel aps o GET subsequente feito com sucesso
(ou uma leitura automtica via JOB INPUT).
Sintaxe :
POINT nome-arquivo |=|EQ|GE|GQ|>=|

|campo|literal|

Exemplo :
POINT CADCLI GE 100000 STATUS
IF EOF CADCLI
DISPLAY NO ACHOU. DEU EOF...
STOP
END-IF
IF CADCLI:FILE-STATUS NE 0
DISPLAY NEM FEZ O POINT OK. IMAGINA O GET...
STOP
END-IF
LEDENOVO
GET CADCLI STATUS
IF EOF CADCLI
GO TO PROCESSOU
END-IF
IF CADCLI:FILE-STATUS NE 0
DISPLAY ERRO NO GET
STOP
END-IF
IF CODCLI NE 100000
DISPLAY FALTA REGISTRO HEADER DE GRUPO
GO TO LEDENOVO
END-IF
PROCESSAR
.
.
.
.
.
PROCESSOU
.
.
.

[STATUS]

EASYTRIEVE
9 Comandos de I/O a) Display b) Get c) Put

e) Comando READ
Para efetuar a leitura aleatria (randmica) de um registro lgico em um arquivo VSAM.
Sintaxe :
READ nome-arquivo KEY |campo|literal-alfa| [STATUS]

Status 16 = registro no localizado


Exemplo :
READ CADCLI KEY CODCLI STATUS
IF CADCLI:FILE-STATUS NE 0
DISPLAY NO ACHOU
STOP
END-IF
READ CADCLI KEY 0120034 STATUS
IF CADCLI:FILE-STATUS NE 0
DISPLAY NO ACHOU
STOP
END-IF
f) Comando WRITE
Para efetuar a gravao de novos registros, update de registros j existentes, ou delete de um
registro lgico num arquivo VSAM.
Sintaxe :
WRITE nome-arquivo [|UPDATE|ADD|]

[FROM |nome-arq|campo| ] [STATUS]

Para efetuar a gravao de novos registros ou fazer update de registros j existentes.


ou
WRITE nome-arquivo DELETE [STATUS]

Para efetuar o delete (lgico) de um registro num arquivo VSAM.


Status 8 = chave duplicada

EASYTRIEVE
9 Comandos de I/O a) Display b) Get c) Put

Exemplos :
WRITE CADCLI DELETE STATUS
IF CADCLI:FILE-STATUS NE 0
DISPLAY ERRO GRAVE
STOP
END-IF
(atualiza campos desejados na rea de I/O)
WRITE CADCLI UPDATE STATUS
IF CADCLI:FILE-STATUS NE 0
DISPLAY ERRO GRAVE
STOP
END-IF
(prepara rea de I/O)
WRITE CADCLI ADD FROM NOVO-CLIENTE STATUS
IF CADCLI:FILE-STATUS NE 0
DISPLAY CHAVE DUPLICADA
STOP
END-IF

Exemplo 026
Comandos I/O
//DS029026 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//* ----------------------------------------------------------//STEPEASY EXEC PGM=EZTPA00
//ENTRAPS DD *
ALB
ALBERTO
VALER
ROBER
VAL
VALDICE
ZULU
//ENTRAVS DD DSN=DV.#029.KL.EZTVSAM,DISP=SHR
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 026
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS (AREAS DE I/O NAO NECESSARIAS)
*--------------------------------------------------

EASYTRIEVE
9 Comandos de I/O a) Display b) Get c) Put
FILE ENTRAPS
ALS-NOME
1 15 A
FILE ENTRAVS VS
ALV
1 80 A
ALV-NOME
1 15 A
ALV-DATA
16 08 N
ALV-SALDO
24 10 N 2
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WLL
W
7
N
WEX
W
7
N
*-------------------------------------------------* DECLARACAO DE PROCEDIMENTOS
*-------------------------------------------------*------------* ATIVIDADE 1
*------------JOB INPUT NULL
DISPLAY 'FIM ATIVIDADE 1 COMECO 2'
STOP
*------------* ATIVIDADE 2
*------------JOB INPUT ENTRAPS
POINT ENTRAVS GE ALS-NOME
IF EOF ENTRAVS
DISPLAY ' PROCURADO ' ALS-NOME ' ACHADO EOF'
GO TO JOB
END-IF
IF ENTRAVS:FILE-STATUS NE 0
DISPLAY 'ERRO NO POINT'
GO TO JOB
END-IF
GET ENTRAVS STATUS
IF EOF ENTRAVS
DISPLAY 'CHAVE NAO ACHADA : ' ALS-NOME
GO TO JOB
END-IF
IF ENTRAVS:FILE-STATUS NE 0
DISPLAY 'ERRO NO GET'
GO TO JOB
END-IF
IF ALV-NOME EQ ALS-NOME
DISPLAY ' PROCURADO ' ALS-NOME ' ACHADO (TUDO IGUAL) : ' ALV-NOME
ELSE
DISPLAY ' PROCURADO ' ALS-NOME ' ACHADO ' ALV-NOME
END-IF
GO TO JOB
*------------* ATIVIDADE 3
*------------JOB INPUT NULL
DISPLAY 'FIM ATIVIDADE 3 COMECO 4'
STOP
*------------* ATIVIDADE 4

EASYTRIEVE
9 Comandos de I/O a) Display b) Get c) Put
*------------JOB INPUT ENTRAPS
READ ENTRAVS KEY ALS-NOME STATUS
IF ENTRAVS:FILE-STATUS NE 0
DISPLAY 'PROCUROU : ' ALS-NOME ' MAS NAO ACHOU'
GO TO JOB
END-IF
DISPLAY 'PROCUROU : ' ALS-NOME ' E ACHOU (' ALV-NOME ')'
GO TO JOB
********************************************************
* FIM **************************************************
********************************************************
//SAIDAS
DD *
FIM ATIVIDADE 1 COMECO 2
PROCURADO ALB
ACHADO BARTIRA
PROCURADO ALBERTO
ACHADO BARTIRA
PROCURADO VALER
ACHADO ZIGOMAR
PROCURADO ROBER
ACHADO TIQUINHA
PROCURADO VAL
ACHADO VALDICE
PROCURADO VALDICE
ACHADO (TUDO IGUAL) : VALDICE
PROCURADO ZULU
ACHADO EOF
129/05/01 15.02.09
CA-EASYTRIEVE PLUS-6.2 9606
COMPRADOR EASYTRIEVE
0PROGRAMS AND ALL SUPPORTING MATERIALS COPYRIGHT (C) 1982, 1996 BY COMPUTER
-FILE STATISTICS - CA-EASYTRIEVE PLUS 6.2 9606-29/05/01-15.02-JSN00031
ENTRAPS
7
INPUT
SAM FIX
BLK
80
ENTRAVS
6
INPUT
VSAM
UNDEF
80
FIM ATIVIDADE 3 COMECO 4
PROCUROU : ALB
MAS NAO ACHOU
PROCUROU : ALBERTO
MAS NAO ACHOU
PROCUROU : VALER
MAS NAO ACHOU
PROCUROU : ROBER
MAS NAO ACHOU
PROCUROU : VAL
MAS NAO ACHOU
PROCUROU : VALDICE
E ACHOU (VALDICE
)
PROCUROU : ZULU
MAS NAO ACHOU
129/05/01 15.02.09
CA-EASYTRIEVE PLUS-6.2 9606
COMPRADOR EASYTRIEVE
0PROGRAMS AND ALL SUPPORTING MATERIALS COPYRIGHT (C) 1982, 1996 BY COMPUTER
-FILE STATISTICS - CA-EASYTRIEVE PLUS 6.2 9606-29/05/01-15.02-JSN00065
ENTRAPS
7
INPUT
SAM FIX
BLK
80
ENTRAVS
1
INPUT
VSAM
UNDEF
80

10 Atividade SORT
A atividade SORT indica um processo de classificao de um arquivo que possa ser tratado
sequencialmente, e os procedimentos que eventualmente possam ser feitos, relacionados a tal
processo de classificao.
A sintaxe da atividade SORT :
SORT nome-arquivo1 TO nome-arquivo2 +
USING campo1 [D] [ campo2 [D] ... campon [D] ] +
[SIZE literal1] +
[WORK literal2] +
[BEFORE nome-proc] +
[NAME nome-ativ]

Sendo :
nome-arquivo1

= nome do FILE para entrada

nome-arquivo2

= nome do FILE para saida

literal1

= nro aproximado de registros a classificar

literal2

= nro de arquivos de trabalho

nome-proc

= nome da rotina que tem acesso aos registros aps a leitura, para
modific-los e / ou filtr-los

nome-ativ

= nome (somente para documentao)

Nos procedimentos referentes atividade SORT, no permitido utilizar comandos que efetuem
I/O (Display, Get, Point, Print, Put, Read, Write, Dli, Idms, Sql).
Observar que o DISPLAY para a SYSPRINT vlido.

EASYTRIEVE
10 Atividade Sort

Exemplo 027
SORT
//DS029027 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//* ----------------------------------------------------------//STEPEASY EXEC PGM=EZTPA00
//ENTRAPS DD *
ALB
ALBERTO
VALER
ROBER
VAL
VALDICE
ZULU
NOME DESLOC
//SAIDAPS DD DSN=&&TEMP,DISP=(NEW,PASS),DCB=(LRECL=500,RECFM=FB)
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 027
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS (AREAS DE I/O NAO NECESSARIAS)
*-------------------------------------------------FILE ENTRAPS
ALS-NOME
1 15 A
ALS-NOME1
1 1 A
ALS-NOME14
2 14 A
FILE SAIDAPS
A-NOME
1 15 A
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WLL
W
7
N
WEX
W
7
N
*-------------------------------------------------* DECLARACAO DE PROCEDIMENTOS
*-------------------------------------------------*------------* ATIVIDADE 1
*------------SORT ENTRAPS TO SAIDAPS USING ALS-NOME BEFORE SELECIONA
SELECIONA. PROC
IF ALS-NOME1 NE ' '
SELECT
END-IF
DO WHILE ALS-NOME1 EQ ' '
ALS-NOME = ALS-NOME14
END-DO
SELECT

EASYTRIEVE
10 Atividade Sort
END-PROC
STOP
*------------* ATIVIDADE 2
*------------JOB INPUT SAIDAPS
DISPLAY A-NOME
GO TO JOB
********************************************************
* FIM **************************************************
********************************************************
//SAIDAS
DD *
129/05/01 15.25.02
CA-EASYTRIEVE PLUS-6.2 9606
COMPRADOR EASYTRIEVE
0PROGRAMS AND ALL SUPPORTING MATERIALS COPYRIGHT (C) 1982, 1996 BY COMPUTER
-FILE STATISTICS - CA-EASYTRIEVE PLUS 6.2 9606-29/05/01-15.25-SRT00024
ENTRAPS
8
INPUT
SAM FIX
BLK
80
SAIDAPS
8
OUTPUT
SAM FIX
BLK
500
129/05/01 15.25.02
CA-EASYTRIEVE PLUS-6.2 9606
COMPRADOR EASYTRIEVE
0PROGRAMS AND ALL SUPPORTING MATERIALS COPYRIGHT (C) 1982, 1996 BY COMPUTER
-FILE STATISTICS - CA-EASYTRIEVE PLUS 6.2 9606-29/05/01-15.25-JSN00035
SAIDAPS
8
INPUT
SAM FIX
BLK
500
ALB
ALBERTO
NOME DESLOC
ROBER
VAL
VALDICE
VALER
ZULU
129/05/01 15.25.02
CA-EASYTRIEVE PLUS-6.2 9606
COMPRADOR EASYTRIEVE
0PROGRAMS AND ALL SUPPORTING MATERIALS COPYRIGHT (C) 1982, 1996 BY COMPUTER
-FILE STATISTICS - CA-EASYTRIEVE PLUS 6.2 9606-29/05/01-15.25-JSN00039
SAIDAPS
8
INPUT
SAM FIX
BLK
500

11 RECURSO de MATCH
O recurso de MATCH (intercalao / merge) de arquivos possvel devido possibilidade de
especificar, num teste de condio, testes de presena de arquivos, de presena de srie de
arquivos, e de relacionamento de arquivos.
Relembrando a sintaxe desses casos indicada inicialmente no captulo referente ao IF, temos :
PRESENA DE ARQUIVOS = testa se um registro do arquivo em referncia est ou no
disponvel para processamento.
IF [NOT] [EOF]

|nome-arquivo|PRIMARY|SECONDARY|

PRESENA DE SRIE DE ARQUIVOS = testa se registro(s) do arquivo tem correspondente


em outro ou no.
IF [NOT]

MATCHED

|nome-arquivo|PRIMARY|SECONDARY|

RELACIONAMENTO DE ARQUIVOS = testa se registro(s) do arquivo tem duplicidade (ou


qual duplicidade) em outro ou no.
IF [NOT] |DUPLICATE|FIRST-DUP|LAST-DUP| |nome-arq|PRIMARY|SECONDARY|

Exemplo 028
MATCH
//DS029028 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//JOBLIB
DD DSN=DSLIB.LOAD00,DISP=SHR
//* -----------------------------------------------------------------//* STEP 04 - SINCRONIZACAO DE DOIS ARQ. (MATCH)
//* -----------------------------------------------------------------//STEP4
EXEC PGM=EZTPA00
//CLIANT
DD *
NOME CLIENTE 001
12345678901(011)2223344
NOME CLIENTE 001
12345678901(011)2223344
NOME CLIENTE 010
12345678910(011)2223344
NOME CLIENTE 015
12345678915(011)2223344
NOME CLIENTE 016
12345678916(011)2223344
NOME CLIENTE 017
12345678917(011)2223344
NOME CLIENTE 025
12345678925(011)2223344
NOME CLIENTE 030
12345678930(011)2223344
//CLINOV
DD *
NOME CLIENTE 002
12345678902(011)2223344
NOME CLIENTE 002
12345678902(011)2223344
NOME CLIENTE 009
12345678909(011)2223344
NOME CLIENTE 013
12345678913(011)2223344
NOME CLIENTE 022
12345678922(011)2223344
NOME CLIENTE 025
12345678925(011)2223344
NOME CLIENTE 031
12345678931(011)2223344
NOME CLIENTE 032
12345678932(011)2223344

EASYTRIEVE
11 Recurso de Match
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 028
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS E RESPECTIVAS AREAS DE I/O
*-------------------------------------------------FILE CLIANT
ANT-REG-CLI-ANTIGOS
1 80 A
ANT-CLINOME
1 20 A
ANT-CLICPF
21 11 N
ANT-CLITEL
32 12 A
*
FILE CLINOV
NOV-REG-CLI-NOVOS
1 80 A
NOV-CLINOME
1 20 A
NOV-CLICPF
21 11 N
NOV-CLITEL
32 12 A
*
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------IGUAIS
W
8 N
ANTIGS
W
8 N
NOVOSC
W
8 N
*-------------------------------------------------* DECLARACAO DE PROCEDIMENTOS
*-------------------------------------------------*------------* ROTINA PRINCIPAL
*------------JOB INPUT (CLIANT KEY (ANT-CLINOME
+
ANT-CLICPF)
+
CLINOV KEY (NOV-CLINOME
+
NOV-CLICPF)) FINISH TERMINAR
*
IF DUPLICATE PRIMARY
DISPLAY 'REGISTRO DUPLICADO EM CLIANT : ' ANT-CLINOME ANT-CLICPF
END-IF
IF DUPLICATE SECONDARY
DISPLAY 'REGISTRO DUPLICADO EM CLINOV : ' NOV-CLINOME NOV-CLICPF
END-IF
*
IF MATCHED
IGUAIS = IGUAIS + 1
DISPLAY 'CLIENTE (NOVO) JAH EXISTIA ' ANT-CLINOME ' CPF=' ANT-CLICPF
ELSE
IF CLIANT
ANTIGS = ANTIGS + 1
DISPLAY 'CLIENTE ANTIGO
: ' ANT-CLINOME ' CPF=' ANT-CLICPF
ELSE
IF CLINOV
NOVOSC = NOVOSC + 1
DISPLAY 'CLIENTE NOVO
: ' NOV-CLINOME ' CPF=' NOV-CLICPF
END-IF
END-IF
END-IF

EASYTRIEVE
11 Recurso de Match
*
*------------* ROTINA DE FINALIZACAO
*------------TERMINAR. PROC
DISPLAY 'REGISTROS PRESENTES NO CLIANT E CLINOV ==> ' IGUAIS
DISPLAY 'REGISTROS PRESENTES SOH EM CLIANT
==> ' ANTIGS
DISPLAY 'REGISTROS PRESENTES SOH EM CLINOV
==> ' NOVOSC
END-PROC
********************************************************
* FIM **************************************************
********************************************************
//EZTVFM
DD UNIT=3390,SPACE=(TRK,(500,50),RLSE)
//SORTWK1 DD UNIT=3390,SPACE=(TRK,(500,50),RLSE)
//SYSOUT
DD SYSOUT=*
//SORTMSG DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//RELA
DD SYSOUT=*
//RELB
DD SYSOUT=*
//SAIDAS DD *
REGISTRO DUPLICADO EM CLIANT : NOME CLIENTE 001
12345678901
CLIENTE ANTIGO
: NOME CLIENTE 001
CPF=12345678901
REGISTRO DUPLICADO EM CLIANT : NOME CLIENTE 001
12345678901
CLIENTE ANTIGO
: NOME CLIENTE 001
CPF=12345678901
REGISTRO DUPLICADO EM CLINOV : NOME CLIENTE 002
12345678902
CLIENTE NOVO
: NOME CLIENTE 002
CPF=12345678902
REGISTRO DUPLICADO EM CLINOV : NOME CLIENTE 002
12345678902
CLIENTE NOVO
: NOME CLIENTE 002
CPF=12345678902
CLIENTE NOVO
: NOME CLIENTE 009
CPF=12345678909
CLIENTE ANTIGO
: NOME CLIENTE 010
CPF=12345678910
CLIENTE NOVO
: NOME CLIENTE 013
CPF=12345678913
CLIENTE ANTIGO
: NOME CLIENTE 015
CPF=12345678915
CLIENTE ANTIGO
: NOME CLIENTE 016
CPF=12345678916
CLIENTE ANTIGO
: NOME CLIENTE 017
CPF=12345678917
CLIENTE NOVO
: NOME CLIENTE 022
CPF=12345678922
CLIENTE (NOVO) JAH EXISTIA NOME CLIENTE 025
CPF=12345678925
CLIENTE ANTIGO
: NOME CLIENTE 030
CPF=12345678930
CLIENTE NOVO
: NOME CLIENTE 031
CPF=12345678931
CLIENTE NOVO
: NOME CLIENTE 032
CPF=12345678932
REGISTROS PRESENTES NO CLIANT E CLINOV ==> 00000001
REGISTROS PRESENTES SOH EM CLIANT
==> 00000007
REGISTROS PRESENTES SOH EM CLINOV
==> 00000007
129/05/01 11.03.13
CA-EASYTRIEVE PLUS-6.2 9606
COMPRADOR EASYTRIEVE
0PROGRAMS AND ALL SUPPORTING MATERIALS COPYRIGHT (C) 1982, 1996 BY COMPUTER
-FILE STATISTICS - CA-EASYTRIEVE PLUS 6.2 9606-29/05/01-11.03-JSN00031
CLIANT
8
INPUT
SAM FIX
BLK
80
CLINOV
8
INPUT
SAM FIX
BLK
80

12 - Uso de sub-programas (comando CALL)


Atravs do comando CALL pode-se chamar para execuo uma sub-rotina, mesmo desenvolvida
em outra linguagem, desde que siga as linkage conventions.
Sintaxe :
CALL nomerotina [ USING |campo1|literal| [|campo2|literal|] ... ] +
[ RETURNS nome-campo ]

Os nomes de campo e/ou literais indicam os parmetros que so passados PARA a sub-rotina.
O nome do campo em RETURNS indica um campo numrico que deve receber um return-code
DA sub-rotina.
Exemplo 029
CALL
//DS029029 JOB ,NOME,CLASS=D,MSGCLASS=X
//*---------------------------------------------------------------//STEP1
EXEC PGM=EZTPA00
//RELAT1
DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SORTMSG DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSIN
DD *
*-----------------------------------------------------------------* PROGRAMA EXEMPLO 029
*-----------------------------------------------------------------FILE RELAT1 PRINTER
*-----------------------------------------------------------------W-HOJE-AAMMDD
W
6 N
W-HOJE-AA W-HOJE-AAMMDD
2 N
W-HOJE-MM W-HOJE-AAMMDD +2 2 N
W-HOJE-DD W-HOJE-AAMMDD +4 2 N
W-TODAY
W
8 A
W-DAY
W-TODAY
2 N
W-MON
W-TODAY
+3 2 N
W-YEA
W-TODAY
+6 2 N
W-HORA
W
12 A
W-HH
W-HORA
2 N
W-MM
W-HORA
+3 2 N
W-SS
W-HORA
+6 2 N
*------------------------------------------WSR-BOOK
W
152 A
ZZ
WSR-BOOK
152 A
WSR-TAREFA
ZZ
2 N
WSR-NRAGENCI
ZZ +2
5 N
WSR-DATA1
ZZ +7
8 N
WSR-DATA1-SS
ZZ +7
2 N

EASYTRIEVE
12 Uso de sub-programas (comando Call)
WSR-DATA1-AAMMDD
ZZ +9
6 N
WSR-DATA2
ZZ +15
8 N
WSR-DATA2-SS
ZZ +15
2 N
WSR-DATA2-AAMMDD
ZZ +17
8 N
WSR-DIAUTIL
ZZ +23
1 A
WSR-DIASCORR
ZZ +24
6 N
WSR-DIFD
ZZ +24
6 N
WSR-DIASCORRUTIL
ZZ +30
6 N
WSR-SADOFE
ZZ +36
1 A
WSR-DIASEM
ZZ +37
1 N
WSR-DIASEMANA
ZZ +38
7 A
WSR-DIAUTILAFER
ZZ +45
8 N
WSR-DIAUTILDFER
ZZ +53
8 N
WSR-DTJULIANA
ZZ +61
8 A
WSR-ALOCADO
ZZ +69
1 N
WSR-DIASCORRUTIL1 ZZ +70
6 N
WSR-FILLER
ZZ +76
43 A
WSR-RC
ZZ +119
3 N
WSR-MENSAGEM
ZZ +122 30 A
*-----------------------------------------------------------------* PROCEDIMENTOS
*-----------------------------------------------------------------JOB INPUT NULL
W-TODAY = SYSDATE
W-HORA = SYSTIME
*
W-HOJE-AA = W-YEA
W-HOJE-MM = W-MON
W-HOJE-DD = W-DAY
*
MOVE 20
TO WSR-DATA1-SS
MOVE 010101
TO WSR-DATA1-AAMMDD
MOVE 20
TO WSR-DATA2-SS
MOVE W-HOJE-AAMMDD
TO WSR-DATA2-AAMMDD
MOVE 03 TO WSR-TAREFA
. * INDICA PARA CALCULAR DIAS CORRIDOS
CALL UTDT01 USING WSR-BOOK
IF
WSR-RC NE 0 3 4
DISPLAY 'WSR - ERRO CALCULO !!! '
DISPLAY 'WSR - DATA-1
= ' WSR-DATA1
DISPLAY 'WSR - DATA-2
= ' WSR-DATA2
RETURN-CODE = 4
END-IF
*
DIF-OK
WSR-DIFD = WSR-DIFD + 1
DISPLAY RELAT1 '*********************************************'
DISPLAY RELAT1 'DATA=' W-TODAY '
HORA=' W-HORA
DISPLAY RELAT1 'DATA JULIANA = ' WSR-DIFD
DISPLAY RELAT1 '*********************************************'
*
STOP
//SAIDAS DD *
*********************************************
DATA=29/05/01
HORA=11.07.24
DATA JULIANA = 000149
*********************************************

EASYTRIEVE
12 Uso de sub-programas (comando Call)

13 - Tabelas : declarao e referncia no processamento


A utilizao de tabelas internas de memria indicada na declarao das variveis atravs da
indicao da quantidade de ocorrncias do campo, e, na parte de procedimentos, da indicao de
um ndice que indica qual das ocorrncias deseja-se referenciar.
A quantidade de ocorrncias indicada atravs da clusula OCCURS.
A referncia ao indexador feita colocando-se o nome do campo ou literal numrica que tenham
o nmero a ser usado para indexar, entre parnteses, aps o nome da varivel que tenha
OCCURS (ou que seja subordinada a um campo com OCCURS).
Exemplo :
TB-MESES
W 132
TB-1MES TB-MESES
11
TB-CODM TB-1MES
2
TB-EXTM TB-1MES
+002 9
TB-MES01 TB-MESES
11
TB-MES02 TB-MESES +011 11
TB-MES03 TB-MESES +022 11
TB-MES04 TB-MESES +033 11
TB-MES05 TB-MESES +044 11
TB-MES06 TB-MESES +055 11
TB-MES07 TB-MESES +066 11
TB-MES08 TB-MESES +077 11
TB-MES09 TB-MESES +088 11
TB-MES10 TB-MESES +099 11
TB-MES11 TB-MESES +110 11
TB-MES12 TB-MESES +121 11
.
.
.
WIX = 1
PROXCODMES
IF WIX
GT 12
GO TO MESEXTOK
END-IF
IF W-MON NE TB-CODM (WIX)
WIX = WIX + 1
GO TO PROXCODMES
ELSE
WEXTMES = TB-EXTM (WIX)
END-IF
MESEXTOK

A
A
N
A
A
A
A
A
A
A
A
A
A
A
A
A

OCCURS 12
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE

01JANEIRO
02FEVEREIRO
03MARCO

04ABRIL

05MAIO

06JUNHO

07JULHO

08AGOSTO

09SETEMBRO
10OUTUBRO
11NOVEMBRO
12DEZEMBRO

EASYTRIEVE
13 Tabelas : declarao e referncia no processamento

Outro exemplo :
TB-MESES
W 132
A
TB-1MES TB-MESES
11
A OCCURS 12
TB-CODM TB-1MES
2
N
TB-EXTM TB-1MES
+002 9
A
TB-MES01 TB-MESES
11 A VALUE +
01JANEIRO 02FEVEREIRO03MARCO
04ABRIL
07JULHO
08AGOSTO
09SETEMBRO 10OUTUBRO
.
.
.
WIX = 1
PROXCODMES
IF WIX
GT 12
GO TO MESEXTOK
END-IF
IF W-MON NE TB-CODM (WIX)
WIX = WIX + 1
GO TO PROXCODMES
ELSE
WEXTMES = TB-EXTM (WIX)
END-IF
MESEXTOK

05MAIO
06JUNHO
+
11NOVEMBRO 12DEZEMBRO

Exemplo 030
Tabelas
//DS029030 JOB ,NOME,CLASS=D,MSGCLASS=X
//*---------------------------------------------------------------//STEP1
EXEC PGM=EZTPA00
//RELAT
DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 030
********************************************************
FILE RELAT PRINTER
*-----------------------------------------------------------------* VARIAVEIS DE TRABALHO
*-----------------------------------------------------------------WIX
W
7 N
WEXTMES
W
9 A
W-HOJE-AAMMDD
W
6 N
W-HOJE-AA W-HOJE-AAMMDD
2 N
W-HOJE-MM W-HOJE-AAMMDD +2 2 N
W-HOJE-DD W-HOJE-AAMMDD +4 2 N
W-TODAY
W
8 A

EASYTRIEVE
13 Tabelas : declarao e referncia no processamento
W-DAY
W-TODAY
2 N
W-MON
W-TODAY
+3 2 N
W-YEA
W-TODAY
+6 2 N
W-HORA
W
12 A
W-HH
W-HORA
2 N
W-MM
W-HORA
+3 2 N
W-SS
W-HORA
+6 2 N
*------------------------------------------TB-MESES
W
132
A VALUE +
'01JANEIRO +
02FEVEREIRO+
03MARCO
+
04ABRIL
+
05MAIO
+
06JUNHO
+
07JULHO
+
08AGOSTO
+
09SETEMBRO +
10OUTUBRO +
11NOVEMBRO +
12DEZEMBRO '
TB-1MES TB-MESES
11
A OCCURS 12
TB-CODM TB-1MES
2
N
TB-EXTM TB-1MES
+002 9
A
*------------------------------------------TB-DEMO-KEY
W
4
A OCCURS 8000
TB-DEMO-MAX
W
4
N VALUE 8000
TB-DEMO-TEM
W
4
N
TB-IND
W
4
N
TB-PROX
W
4
N
W-ARG
W
4
A
W-KEY
W
4
A
W-COMPS
W
7
N
W-TROCOU
W
4
N
W-VARREU
W
4
N
W-ESQ
W
4
N
W-DIR
W
4
N
W-MEIO
W
4
N
*------------------------------------------TB-DEMO2-ITEM
W
4
A OCCURS 500 INDEX TB-DEMO2-IND
TB-DEMO2-MAX
W
4
N VALUE 500
* SE TEM INDEX NAO PRECISA DEFINIR TB-DEMO2-IND; EH AUTOMATICO
*-----------------------------------------------------------------* PROCEDIMENTOS
*-----------------------------------------------------------------JOB INPUT NULL START INICIALIZAR FINISH FINALIZAR
* --------------------------------* CONSTROI TABELA DEMO2 COM INDEX DEFINIDO AUTOMATICAMENTE
* --------------------------------DISPLAY RELAT '-------- TB-DEMO2-------------'
VOLTADEMO2
TB-DEMO2-IND = TB-DEMO2-IND + 1
IF TB-DEMO2-IND GT TB-DEMO2-MAX
GO TO TBDEMO2OK
ELSE
TB-DEMO2-ITEM (TB-DEMO2-IND) = TB-DEMO2-IND
GO TO VOLTADEMO2

EASYTRIEVE
13 Tabelas : declarao e referncia no processamento
END-IF
TBDEMO2OK
TB-DEMO2-IND = TB-DEMO2-IND - 1
DISPLAY RELAT TB-DEMO2-IND ' ITENS PREENCHIDOS'
DISPLAY RELAT TB-DEMO2-MAX ' ITENS MAX'
DISPLAY RELAT 'ITEM 1=' TB-DEMO2-ITEM (1)
DISPLAY RELAT 'ITEM ' TB-DEMO2-IND '=' TB-DEMO2-ITEM (TB-DEMO2-IND)
* --------------------------------* COLOCA CONTEUDO NA TABELA
* --------------------------------DISPLAY RELAT '-------- TB-DEMO -------------'
VOLTAPOR
TB-IND = TB-IND + 1
IF TB-IND GT TB-DEMO-MAX - 10
GO TO CONSTRUIU
ELSE
TB-DEMO-KEY (TB-IND) = TB-IND
GO TO VOLTAPOR
END-IF
CONSTRUIU
TB-DEMO-TEM = TB-IND - 1
DISPLAY RELAT TB-DEMO-TEM ' ITENS PREENCHIDOS; +
' TB-DEMO-MAX ' ITENS MAX' +
' ITEM 1=' TB-DEMO-KEY (1)
+
' ITEM ' TB-DEMO-TEM '=' TB-DEMO-KEY (TB-DEMO-TEM)
* --------------------------------* CLASSIFICA NA MEMORIA ORDEM CRESCENTE
* --------------------------------DISPLAY RELAT '-------- CLASSIFICA ----------'
VOLTAVARRE
W-VARREU = W-VARREU + 1
TB-IND = 0
W-TROCOU = 0
VESETROCA
TB-IND = TB-IND + 1
IF TB-IND GE TB-DEMO-MAX - 10
GO TO VARREU
ELSE
TB-PROX = TB-IND + 1
* IF TB-DEMO-KEY (TB-IND) LT TB-DEMO-KEY (TB-PROX) SE FOSSE DECRESC.
IF TB-DEMO-KEY (TB-IND) GT TB-DEMO-KEY (TB-PROX)
W-KEY = TB-DEMO-KEY (TB-IND)
TB-DEMO-KEY (TB-IND) = TB-DEMO-KEY (TB-PROX)
TB-DEMO-KEY (TB-PROX) = W-KEY
W-TROCOU = W-TROCOU + 1
END-IF
GO TO VESETROCA
END-IF
VARREU
IF W-TROCOU NE 0
GO TO VOLTAVARRE
END-IF
DISPLAY RELAT
+
W-VARREU ' VARRIDAS. TAB CLASSIFICADA.' +
' ITEM 1=' TB-DEMO-KEY (1)
+
' ITEM ' TB-DEMO-TEM '=' TB-DEMO-KEY (TB-DEMO-TEM)
* ---------------------------------

EASYTRIEVE
13 Tabelas : declarao e referncia no processamento
* FAZ PESQUISA SEQUENCIAL NA TABELA
* --------------------------------DISPLAY RELAT '-------- PESQUISA SEQUENCIAL --------'
S-PESQ
W-ARG = '4001'
TB-IND = 0
W-COMPS = 0
VOLTAPESQS
TB-IND = TB-IND + 1
IF TB-IND GT TB-DEMO-MAX OR +
TB-IND GT TB-DEMO-TEM
GO TO S-NAO-ACHOU
ELSE
W-COMPS = W-COMPS + 1
IF TB-DEMO-KEY (TB-IND) EQ W-ARG
GO TO S-ACHOU
END-IF
END-IF
GO TO VOLTAPESQS
S-ACHOU
DISPLAY RELAT
+
'BUSCA SEQ:ARGUMENTO ACHADO
=' W-ARG
+
' ITEM=' TB-IND
+
' COMPARACOES=' W-COMPS
GO TO B-PESQ
S-NAO-ACHOU
DISPLAY RELAT
+
'BUSCA SEQ:ARGUMENTO NAO ACHADO=' W-ARG
+
' COMPARACOES=' W-COMPS
* --------------------------------* FAZ PESQUISA BINARIA
NA TABELA
* --------------------------------DISPLAY RELAT '-------- PESQUISA BINARIA --------'
B-PESQ
W-ARG = '3999'
PERFORM PESQBIN
W-ARG = '4000'
PERFORM PESQBIN
W-ARG = '4001'
PERFORM PESQBIN
W-ARG = '4002'
PERFORM PESQBIN
W-ARG = '0000'
PERFORM PESQBIN
W-ARG = '9999'
PERFORM PESQBIN
STOP
*-----------------------------------------------------------------* PESQUISA BINARIA
*-----------------------------------------------------------------PESQBIN. PROC
*
W-ESQ = 1
W-DIR = TB-DEMO-TEM
W-MEIO INTEGER = W-DIR / 2
W-MEIO = W-MEIO + 1
TB-IND = 0

EASYTRIEVE
13 Tabelas : declarao e referncia no processamento
W-COMPS = 0
* ------------------- PROCURA NO RANGE
VE-NO-RANGE
IF W-ARG LT TB-DEMO-KEY (W-ESQ) OR +
W-ARG GT TB-DEMO-KEY (W-DIR)
GO TO B-NAO-ACHOU
END-IF
W-COMPS = W-COMPS + 1
* ------ CALCULA O MEIO
W-MEIO INTEGER = ((W-ESQ + W-DIR) / 2)
DISPLAY RELAT 'W-ESQ=' W-ESQ ' W-DIR=' W-DIR ' W-MEIO=' W-MEIO
IF W-ARG EQ TB-DEMO-KEY (W-MEIO)
TB-IND = W-MEIO
GO TO B-ACHOU
END-IF
IF W-ARG EQ TB-DEMO-KEY (W-ESQ)
TB-IND = W-ESQ
GO TO B-ACHOU
END-IF
IF W-ARG EQ TB-DEMO-KEY (W-DIR)
TB-IND = W-DIR
GO TO B-ACHOU
END-IF
IF W-ARG LT TB-DEMO-KEY (W-MEIO)
GO TO ESTAH-NA-ESQUERDA
ELSE
GO TO ESTAH-NA-DIREITA
END-IF
* ------ SE ESTIVER, ESTAH NA PARTE DA ESQUERDA
ESTAH-NA-ESQUERDA
W-DIR = W-MEIO
IF W-MEIO GT TB-DEMO-TEM
W-MEIO = TB-DEMO-TEM
END-IF
GO TO VE-NO-RANGE
* ------ SE ESTIVER, ESTAH NA PARTE DA DIREITA
ESTAH-NA-DIREITA
W-ESQ = W-MEIO
IF W-ESQ LT 1
W-ESQ = 1
END-IF
GO TO VE-NO-RANGE
* ------ ACHOU
B-ACHOU
DISPLAY RELAT
+
'BUSCA BIN:ARGUMENTO ACHADO
=' W-ARG
+
' ITEM=' TB-IND
+
' COMPARACOES=' W-COMPS
GO TO PESQ-OK
* ------ NAO ACHOU
B-NAO-ACHOU
DISPLAY RELAT
+
'BUSCA SEQ:ARGUMENTO NAO ACHADO=' W-ARG
+
' COMPARACOES=' W-COMPS
PESQ-OK.
*
END-PROC

EASYTRIEVE
13 Tabelas : declarao e referncia no processamento
*-----------------------------------------------------------------* INICIALIZACAO
*-----------------------------------------------------------------INICIALIZAR. PROC
W-TODAY = SYSDATE
W-HORA = SYSTIME
*
W-HOJE-AA = W-YEA
W-HOJE-MM = W-MON
W-HOJE-DD = W-DAY
*
WIX = 1
PROXCODMES
IF WIX
GT 12
GO TO MESEXTOK
END-IF
IF W-MON NE TB-CODM (WIX)
WIX = WIX + 1
GO TO PROXCODMES
ELSE
WEXTMES = TB-EXTM (WIX)
END-IF
MESEXTOK
*
END-PROC
*-----------------------------------------------------------------* FINALIZACAO
*-----------------------------------------------------------------FINALIZAR. PROC
DISPLAY RELAT '*********************************************'
DISPLAY RELAT 'DATA=' W-TODAY '
HORA=' W-HORA
DISPLAY RELAT '
' W-DAY '/' WEXTMES '/' W-YEA
DISPLAY '*********************************************'
*
END-PROC
//SAIDAS DD *
-------- TB-DEMO2------------500 ITENS PREENCHIDOS
0500 ITENS MAX
ITEM 1=0001
ITEM
500 =0500
-------- TB-DEMO ------------7990 ITENS PREENCHIDOS; 8000 ITENS MAX ITEM 1=0001 ITEM 7990=7990
-------- CLASSIFICA ---------0001 VARRIDAS. TAB CLASSIFICADA. ITEM 1=0001 ITEM 7990=7990
-------- PESQUISA SEQUENCIAL -------BUSCA SEQ:ARGUMENTO ACHADO
=4001 ITEM=4001 COMPARACOES=0004001
W-ESQ=0001 W-DIR=7990 W-MEIO=3995
W-ESQ=3995 W-DIR=7990 W-MEIO=5992
W-ESQ=3995 W-DIR=5992 W-MEIO=4993
W-ESQ=3995 W-DIR=4993 W-MEIO=4494
W-ESQ=3995 W-DIR=4494 W-MEIO=4244
W-ESQ=3995 W-DIR=4244 W-MEIO=4119
W-ESQ=3995 W-DIR=4119 W-MEIO=4057
W-ESQ=3995 W-DIR=4057 W-MEIO=4026
W-ESQ=3995 W-DIR=4026 W-MEIO=4010
W-ESQ=3995 W-DIR=4010 W-MEIO=4002

EASYTRIEVE
13 Tabelas : declarao e referncia no processamento
W-ESQ=3995 W-DIR=4002 W-MEIO=3998
W-ESQ=3998 W-DIR=4002 W-MEIO=4000
W-ESQ=3998 W-DIR=4000 W-MEIO=3999
BUSCA BIN:ARGUMENTO ACHADO
=3999 ITEM=3999 COMPARACOES=0000013
W-ESQ=0001 W-DIR=7990 W-MEIO=3995
W-ESQ=3995 W-DIR=7990 W-MEIO=5992
W-ESQ=3995 W-DIR=5992 W-MEIO=4993
W-ESQ=3995 W-DIR=4993 W-MEIO=4494
W-ESQ=3995 W-DIR=4494 W-MEIO=4244
W-ESQ=3995 W-DIR=4244 W-MEIO=4119
W-ESQ=3995 W-DIR=4119 W-MEIO=4057
W-ESQ=3995 W-DIR=4057 W-MEIO=4026
W-ESQ=3995 W-DIR=4026 W-MEIO=4010
W-ESQ=3995 W-DIR=4010 W-MEIO=4002
W-ESQ=3995 W-DIR=4002 W-MEIO=3998
W-ESQ=3998 W-DIR=4002 W-MEIO=4000
BUSCA BIN:ARGUMENTO ACHADO
=4000 ITEM=4000 COMPARACOES=0000012
W-ESQ=0001 W-DIR=7990 W-MEIO=3995
W-ESQ=3995 W-DIR=7990 W-MEIO=5992
W-ESQ=3995 W-DIR=5992 W-MEIO=4993
W-ESQ=3995 W-DIR=4993 W-MEIO=4494
W-ESQ=3995 W-DIR=4494 W-MEIO=4244
W-ESQ=3995 W-DIR=4244 W-MEIO=4119
W-ESQ=3995 W-DIR=4119 W-MEIO=4057
W-ESQ=3995 W-DIR=4057 W-MEIO=4026
W-ESQ=3995 W-DIR=4026 W-MEIO=4010
W-ESQ=3995 W-DIR=4010 W-MEIO=4002
W-ESQ=3995 W-DIR=4002 W-MEIO=3998
W-ESQ=3998 W-DIR=4002 W-MEIO=4000
W-ESQ=4000 W-DIR=4002 W-MEIO=4001
BUSCA BIN:ARGUMENTO ACHADO
=4001 ITEM=4001 COMPARACOES=0000013
W-ESQ=0001 W-DIR=7990 W-MEIO=3995
W-ESQ=3995 W-DIR=7990 W-MEIO=5992
W-ESQ=3995 W-DIR=5992 W-MEIO=4993
W-ESQ=3995 W-DIR=4993 W-MEIO=4494
W-ESQ=3995 W-DIR=4494 W-MEIO=4244
W-ESQ=3995 W-DIR=4244 W-MEIO=4119
W-ESQ=3995 W-DIR=4119 W-MEIO=4057
W-ESQ=3995 W-DIR=4057 W-MEIO=4026
W-ESQ=3995 W-DIR=4026 W-MEIO=4010
W-ESQ=3995 W-DIR=4010 W-MEIO=4002
BUSCA BIN:ARGUMENTO ACHADO
=4002 ITEM=4002 COMPARACOES=0000010
BUSCA SEQ:ARGUMENTO NAO ACHADO=0000 COMPARACOES=0000000
BUSCA SEQ:ARGUMENTO NAO ACHADO=9999 COMPARACOES=0000000
*********************************************
DATA=30/05/01
HORA=11.59.16
30/MAIO
/01

14 Uso de DB2
Atravs da atividade JOB, pode-se efetuar a leitura (SELECT) de tabela DB2. Para tanto, deve-se
especificar na declarao da atividade JOB INPUT SQL, e, imediatamente aps, especificar o
comando SELECT desejado.
Observar que neste caso,
se houver uma nica linha ou mais que uma linha que atenda aos requisitos especificados,
para cada uma ser efetuado o processamento colocado aps o SELECT
se houver pelo menos uma nica linha que atenda aos requisitos especificados, aps o
processamento, se no for especificado em contrrio (como um STOP), ser efetuado um GO
TO JOB que far nova tentativa de obteno de uma nova linha.
quando no houver mais nenhuma linha que preencha os requisitos especificados, ser
efetuado um encerramento da atividade; portanto, o teste de fim automtico, e no adianta
ser colocado nos procedimentos do job aps o select.
no deve ser declarado cursor, nem open ou close.
O(s) critrio(s) de seleo para a entrada so especificados no comando SELECT que DEVE
estar imediatamente aps o JOB. A declarao de atividade feita como abaixo, indica input de
uma tabela SQL.
.
.
JOB INPUT SQL [START nome-proc1] [FINISH nome-proc2] [NAME nome-job]
SELECT coluna1 [, coluna2..... , colunan ] FROM nometabela +
[WHERE condio]
+
[ORDER coluna1 [... , colunan] ]
+
INTO :campo1 [ ... , campon]
.
.

Portanto, os procedimentos de uma atividade declarada da forma acima, equivalem a especificar


uma atividade JOB normal (JOB INPUT), e, dentro do processamento, efetuar o OPEN +
FETCH + CLOSE, tendo sido declarado, junto com as variveis, o(s) cursor(es) necessrio(s).
.
.
SQL DECLARE nomecursor CURSOR FOR +
SELECT coluna1 [, coluna2..... , colunan ] FROM nometabela +
[WHERE condio]
+
[ORDER coluna1 [... , colunan] ]
.
JOB INPUT xxx [START nome-proc1] [FINISH nome-proc2] [NAME nome-job]
.
.
SQL OPEN nomecursor
loop SQL FETCH nomecursor
SQL CLOSE nomecursor
.
.

EASYTRIEVE
14 Uso de DB2

Exemplo 031
Uso DB2
//DS029031 JOB CLASS=D,MSGCLASS=X,REGION=4M,COND=(00,NE)
//*----------------------------------------------------------------//EZDB2
EXEC PGM=EZTPA00
//*----------------------------------------------------------------//STEPLIB
INCLUDE MEMBER=STEPDES
//SORTWK1
DD UNIT=3390,SPACE=(TRK,(100,20),RLSE)
//EZTVFM
DD UNIT=3390,SPACE=(TRK,(100,20),RLSE)
//RELAT1
DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 031
********************************************************
* ACESSA SYSCOLUMNS VIA JOB INPUT SQL E JOB NORMAL
* 1. ACESSO JOB INPUT SQL
COM LINHA OBTIDA DA TABELA
* 2. ACESSO JOB INPUT SQL
SEM LINHA OBTIDA DA TABELA
* 3. ACESSO JOB INPUT NORMAL COM LINHA OBTIDA DA TABELA
* 4. ACESSO JOB INPUT NORMAL SEM LINHA OBTIDA DA TABELA
********************************************************
*--------------------------* PARM PARA INDICAR QUAL BASE DE DADOS
*--------------------------PARM DB2SSID('DBD1')
*--------------------------* DECLARACAO FILE PRINTER
*--------------------------FILE RELAT1 PRINTER
*--------------------------* DECLARACAO AREAS DE TRABALHO
*--------------------------WLL01
W 05 N MASK('ZZZZ9')
WLL99
W 05 N MASK('ZZZZ9')
TBNAME-X
W 09 A
VALUE '
'
WOPERACAO W 14 A
WSQLCODE
W 8 N 0 MASK ('ZZZZZZZ9-')
WCOLUNAS
W 4 N
MASK ('ZZZ9')
COLNO-X
W 2 B 0
*--------------------------* DECLARACAO CURSOR PARA SYSCOLUMNS COM COLNO=01
* USADO SOMENTE PELA ATIVIDADE JOB INPUT NULL CURSOR01
*--------------------------SQL DECLARE CURSOR01 CURSOR FOR SELECT
+
TBNAME, COLNO
+
FROM SYSIBM.SYSCOLUMNS
+
WHERE TBNAME = 'SYSCOLUMNS'
+
AND COLNO
= 01
+
ORDER BY TBNAME
*--------------------------* DECLARACAO CURSOR PARA SYSCOLUMNS COM COLNO=99
* USADO SOMENTE PELA ATIVIDADE JOB INPUT NULL CURSOR99

EASYTRIEVE
14 Uso de DB2
*--------------------------SQL DECLARE CURSOR99 CURSOR FOR SELECT
+
TBNAME, COLNO
+
FROM SYSIBM.SYSCOLUMNS
+
WHERE TBNAME = 'SYSCOLUMNS'
+
AND COLNO
= 99
+
ORDER BY TBNAME
**********************************************************************
* ATIVIDADE JOB INPUT SQL PARA COLNO=01
**********************************************************************
JOB INPUT SQL START COMECAR FINISH TERMINAR
SELECT
TBNAME, COLNO
+
FROM SYSIBM.SYSCOLUMNS
+
WHERE TBNAME = 'SYSCOLUMNS'
+
AND COLNO
= 01
+
ORDER BY TBNAME
+
INTO :TBNAME-X, :COLNO-X
WLL01 = WLL01 + 1
DISPLAY 'JOB INPUT SQL CURSOR01 ACHOU LINHA'
GO TO JOB
*-------------------*
* TESTA ERRO DB2
*-------------------*
ERRO-DB2. PROC
DISPLAY 'JOB INPUT SQL CURSOR01 VAI TESTAR SQLCODE'
IF SQLCODE NE 0 100
DISPLAY 'JOB INPUT SQL CURSOR01 ERRO. SELECT SQLCODE = ' SQLCODE
ELSE
DISPLAY 'JOB INPUT SQL CURSOR01 OK . SELECT SQLCODE = ' SQLCODE
END-IF
END-PROC
*-------------------*
* COMECAR / TERMINAR
*-------------------*
COMECAR. PROC
DISPLAY 'JOB INPUT SQL CURSOR01 VAI COMECAR'
END-PROC
TERMINAR. PROC
DISPLAY 'JOB INPUT SQL CURSOR01 VAI TERMINAR. LINHAS OBTIDAS = ' WLL01
END-PROC
*
**********************************************************************
* ATIVIDADE JOB INPUT SQL PARA COLNO=99
**********************************************************************
JOB INPUT SQL START COMECAR FINISH TERMINAR
SELECT
TBNAME, COLNO
+
FROM SYSIBM.SYSCOLUMNS
+
WHERE TBNAME = 'SYSCOLUMNS'
+
AND COLNO
= 99
+
ORDER BY TBNAME
+
INTO :TBNAME-X, :COLNO-X
WLL99 = WLL99 + 1
DISPLAY 'JOB INPUT SQL CURSOR99 ACHOU LINHA'
GO TO JOB
*-------------------*
* TESTA ERRO DB2
*-------------------*

EASYTRIEVE
14 Uso de DB2
ERRO-DB2. PROC
DISPLAY 'JOB INPUT SQL CURSOR99 VAI TESTAR SQLCODE'
IF SQLCODE NE 0 100
DISPLAY 'JOB INPUT SQL CURSOR99 ERRO. SELECT SQLCODE = ' SQLCODE
ELSE
DISPLAY 'JOB INPUT SQL CURSOR99 OK . SELECT SQLCODE = ' SQLCODE
END-IF
END-PROC
*-------------------*
* COMECAR / TERMINAR
*-------------------*
COMECAR. PROC
DISPLAY 'JOB INPUT SQL CURSOR99 VAI COMECAR'
END-PROC
TERMINAR. PROC
DISPLAY 'JOB INPUT SQL CURSOR99 VAI TERMINAR. LINHAS OBTIDAS = ' WLL99
END-PROC
**********************************************************************
* ATIVIDADE JOB INPUT NULL CURSOR01
**********************************************************************
JOB INPUT NULL
DISPLAY 'JOB INPUT NULL CURSOR01 VAI COMECAR'
*----------------------------------------* PROCESSA COM CURSOR01
*----------------------------------------TBNAME-X = 'SYSCOLUMNS'
WSQLCODE = 0
CURSOR01-OPEN
WOPERACAO = 'CURSOR01 OPEN'
SQL OPEN CURSOR01
PERFORM ERRO-DB2
CURSOR01-FETCH
WLL01 = 0
DO WHILE WSQLCODE EQ 0
WOPERACAO = 'CURSOR01 FETCH'
SQL FETCH CURSOR01 INTO :TBNAME-X, :COLNO-X
PERFORM ERRO-DB2
IF WSQLCODE NE 0
IF WCOLUNAS NE 0
GO TO CURSOR01-CLOSE
END-IF
ELSE
WLL01 = WLL01 + 1
DISPLAY 'JOB INPUT NULL CURSOR01 ACHOU LINHA'
END-IF
END-DO
CURSOR01-CLOSE
WOPERACAO = 'CURSOR01 CLOSE'
SQL CLOSE CURSOR01
PERFORM ERRO-DB2
*
DISPLAY 'JOB INPUT NULL CURSOR01. LINHAS OBTIDAS = ' WLL01
STOP
*

EASYTRIEVE
14 Uso de DB2
*-------------------*
* TESTA ERRO DB2
*-------------------*
ERRO-DB2. PROC
IF SQLCODE NE 0 100
DISPLAY 'JOB INPUT NULL ' WOPERACAO ' ERRO. SQLCODE = ' SQLCODE
ELSE
DISPLAY 'JOB INPUT NULL ' WOPERACAO ' OK.
SQLCODE = ' SQLCODE
END-IF
WSQLCODE = SQLCODE
END-PROC
*
**********************************************************************
* ATIVIDADE JOB INPUT NULL CURSOR99
**********************************************************************
JOB INPUT NULL
DISPLAY 'JOB INPUT NULL CURSOR99 VAI COMECAR'
*----------------------------------------* PROCESSA COM CURSOR99
*----------------------------------------TBNAME-X = 'SYSCOLUMNS'
WSQLCODE = 0
CURSOR99-OPEN
WOPERACAO = 'CURSOR99 OPEN'
SQL OPEN CURSOR99
PERFORM ERRO-DB2
CURSOR99-FETCH
WLL99 = 0
DO WHILE WSQLCODE EQ 0
WOPERACAO = 'CURSOR99 FETCH'
SQL FETCH CURSOR99 INTO :TBNAME-X, :COLNO-X
PERFORM ERRO-DB2
IF WSQLCODE NE 0
IF WCOLUNAS NE 0
GO TO CURSOR99-CLOSE
END-IF
ELSE
WLL99 = WLL99 + 1
DISPLAY 'JOB INPUT NULL CURSOR99 ACHOU LINHA'
END-IF
END-DO
CURSOR99-CLOSE
WOPERACAO = 'CURSOR99 CLOSE'
SQL CLOSE CURSOR99
PERFORM ERRO-DB2
*
DISPLAY 'JOB INPUT NULL CURSOR99. LINHAS OBTIDAS = ' WLL99
STOP
*
*-------------------*
* TESTA ERRO DB2
*-------------------*
ERRO-DB2. PROC
IF SQLCODE NE 0 100

EASYTRIEVE
14 Uso de DB2
DISPLAY 'JOB INPUT NULL ' WOPERACAO ' ERRO. SQLCODE =
ELSE
DISPLAY 'JOB INPUT NULL ' WOPERACAO ' OK.
SQLCODE =
END-IF
WSQLCODE = SQLCODE
END-PROC
//SAIDAS DD *
JOB INPUT SQL CURSOR01 VAI COMECAR
JOB INPUT SQL CURSOR01 ACHOU LINHA
JOB INPUT SQL CURSOR01 VAI TERMINAR. LINHAS OBTIDAS =
JOB INPUT SQL CURSOR99 VAI COMECAR
JOB INPUT SQL CURSOR99 VAI TERMINAR. LINHAS OBTIDAS =
JOB INPUT NULL CURSOR01 VAI COMECAR
JOB INPUT NULL CURSOR01 OPEN OK.
SQLCODE =
JOB INPUT NULL CURSOR01 FETCH OK.
SQLCODE =
JOB INPUT NULL CURSOR01 ACHOU LINHA
JOB INPUT NULL CURSOR01 FETCH OK.
SQLCODE =
JOB INPUT NULL CURSOR01 CLOSE OK.
SQLCODE =
JOB INPUT NULL CURSOR01. LINHAS OBTIDAS =
1
JOB INPUT NULL CURSOR99 VAI COMECAR
JOB INPUT NULL CURSOR99 OPEN OK.
SQLCODE =
JOB INPUT NULL CURSOR99 FETCH OK.
SQLCODE =
JOB INPUT NULL CURSOR99 CLOSE OK.
SQLCODE =
JOB INPUT NULL CURSOR99. LINHAS OBTIDAS =
0

' SQLCODE
' SQLCODE

1
0

100

100

EASYTRIEVE
14 Uso de DB2

Exemplo 032
Uso DB2
//DS029032 JOB CLASS=D,MSGCLASS=X,REGION=4M,COND=(00,NE)
//*----------------------------------------------------------------//* INFORMAR NOME DA TABELA CUJA ESTRUTURA SERAH LISTADA, VIA PARM
//*----------------------------------------------------------------//EZDB2
EXEC PGM=EZTPA00,PARM='ACT0001'
//*----------------------------------------------------------------//STEPLIB
INCLUDE MEMBER=STEPDES
//SORTWK1
DD UNIT=3390,SPACE=(TRK,(100,20),RLSE)
//EZTVFM
DD UNIT=3390,SPACE=(TRK,(100,20),RLSE)
//REL01
DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 032
********************************************************
* LISTA ESTRUTURA DA TABELA SOLICITADA VIA PARM,
* ATRAVES DE JOB INPUT SQL
********************************************************
*-------------------------------------------------* PARM PARA INDICAR QUAL BASE DE DADOS
*-------------------------------------------------PARM DB2SSID('DBD1')
*-------------------------------------------------* DECLARACAO FILE PRINTER
*-------------------------------------------------FILE REL01 PRINTER
*-------------------------------------------------* DECLARACAO AREAS DE TRABALHO
*-------------------------------------------------*--------------------------* AREAS DE TRABALHO GERAIS
*--------------------------*
* WORK PARA COLUNAS DA TABELA SYSKEYS
*
FLAG
W
1 N
IX
W
3 N
SB
W
3 N
AX-STEP-X
W
20 A
FLAG-OK
W
2 A
*--------------------------* WORK PARA COLUNAS DA TABELA SYSKEYS
*--------------------------T01-DATA-X
W
08 A
TBNAME-X
W
09 A
NAME-X
W
09 A
COLNO-B
W
2 B 0
SCALE-B
W
2 B 0
COLTYPE-X
W
08 A
LENGTH-B
W
2 B 0

EASYTRIEVE
14 Uso de DB2
NULLS-X
W
1 A
REMARKS-X
W
45 A
REMARKS-Y REMARKS-X 22 A
IXNAME-X
W
09 A
COLNAME-X
W
09 A
ORDERING-X
W
01 A
COLNO1-B
W
2 B 0
REFTBNAME-X W
08 A
CH-TBNAME
W
10 A
*--------------------------* TABELA DE MEMORIA PARA RECEBER TABELA DB2 SYSKEYS
*--------------------------TAB
W
111 A OCCURS 100
TB-TBNAME-X
TAB
9 A
HEADING
TB-NAME-X
TAB +09 9 A
HEADING
TB-COLNO-B
TAB +18 3 N MASK ('ZZ9') HEADING
TB-COLTYPE-X
TAB +21 8 A
HEADING
TB-TAMANHO-X
TAB +29 6 A
HEADING
TB-NULLS-X
TAB +35 1 A
HEADING
TB-REMARKS-X
TAB +36 45 A
HEADING
TB-REMARKS-Y
TAB +36 22 A
HEADING
TB-IXNAME-X
TAB +81 9 A
HEADING
TB-COLNAME-X
TAB +90 9 A
HEADING
TB-ORDERING-X TAB +99 1 A
HEADING
TB-COLNO1-B
TAB +100 3 N MASK ('ZZ9')
HEADING
TB-RELNAME-X
TAB +103 8 A
HEADING
*--------------------------* AREA PARA RECEBER PARM COM NOME TABELA A LISTAR
*--------------------------PARM-AREA
W 12 A
PARM-LENGTH PARM-AREA
2 B 0
PARM-DADOS
PARM-AREA +2 10 A
*--------------------------* AREA PARA EDICAO CARACTERISTICAS COLUNA DECIMAL
*--------------------------AX-TAMANHO-X
W 6 A
AX-LENGTH-B AX-TAMANHO-X
3 A
AX-LENGTH1-B AX-LENGTH-B
1 A
AX-LENGTH2-B AX-LENGTH-B +1 1 A
AX-LENGTH3-B AX-LENGTH-B +2 1 A
AX-PONTO-X
AX-TAMANHO-X
+3 1 A
AX-SCALE-B
AX-TAMANHO-X
+4 2 A
*
*--------------------------* DECLARACAO CURSOR PARA SYSKEYS
*--------------------------*
SQL
DECLARE C01 CURSOR FOR SELECT
+
IXNAME,
+
COLNAME,
+
ORDERING,
+
COLNO
+
FROM SYSIBM.SYSKEYS
+
WHERE
IXNAME = :IXNAME-X
+
ORDER BY COLNO
*
*---------------------------

('TAB'
('COL'
('SQ'
('TP'
('TAM'
('NUL'
('DESC'
('DESC'
('IND'
('COL'
('ORD'
('SQ'
('RELAC'

'---')
'---')
'--')
'--')
'---')
'---')
'----')
'----')
'---')
'---')
'---')
'--')
'-----')

EASYTRIEVE
14 Uso de DB2
* DECLARACAO CURSOR PARA SYSINDEXES
*--------------------------*
SQL
DECLARE C02 CURSOR FOR SELECT
+
NAME
+
FROM SYSIBM.SYSINDEXES
+
WHERE
TBNAME = :TBNAME-X
*
*--------------------------* DECLARACAO CURSOR PARA SYSRELS
*--------------------------*
SQL
DECLARE C03 CURSOR FOR SELECT
+
REFTBNAME
+
FROM SYSIBM.SYSRELS
+
WHERE
TBNAME = :TBNAME-X AND +
CREATOR = 'DDS'
*
**********************************************************************
* ATIVIDADE JOB
**********************************************************************
JOB INPUT SQL
START INICIAR FINISH FINALIZAR
*
SELECT
TBNAME,
+
NAME,
+
COLNO,
+
COLTYPE,
+
LENGTH,
+
SCALE,
+
DEFAULT,
+
REMARKS
+
FROM SYSIBM.SYSCOLUMNS
+
WHERE
TBNAME = :CH-TBNAME
+
ORDER BY COLNO
+
INTO
+
:TBNAME-X,
+
:NAME-X,
+
:COLNO-B,
+
:COLTYPE-X,
+
:LENGTH-B,
+
:SCALE-B,
+
:NULLS-X,
+
:REMARKS-X
FLAG-OK = 'OK'
IF FLAG = 0
PERFORM PEGA-INDEXES-RELACAO
END-IF
SB = SB + 1
IF
COLTYPE-X = 'DECIMAL'
IF
SCALE-B > 0
AX-LENGTH-B
AX-SCALE-B
AX-PONTO-X
IF AX-LENGTH1-B

=
=
=
=

LENGTH-B
SCALE-B
'.'
'0'

EASYTRIEVE
14 Uso de DB2

ELSE

AX-LENGTH1-B
END-IF
IF AX-LENGTH2-B
AX-LENGTH2-B
END-IF
IF AX-LENGTH3-B
AX-LENGTH3-B
END-IF
TB-TAMANHO-X(SB)

= ' '
= '0'
= ' '
= '0'
= ' '
= AX-TAMANHO-X

AX-LENGTH-B
AX-SCALE-B
AX-PONTO-X
IF AX-LENGTH1-B
AX-LENGTH1-B
END-IF
IF AX-LENGTH2-B
AX-LENGTH2-B
END-IF
IF AX-LENGTH3-B
AX-LENGTH3-B
END-IF
TB-TAMANHO-X(SB)
END-IF

=
=
=
=
=

AX-LENGTH-B
AX-SCALE-B
AX-PONTO-X
IF AX-LENGTH1-B
AX-LENGTH1-B
END-IF
IF AX-LENGTH2-B
AX-LENGTH2-B
END-IF
IF AX-LENGTH3-B
AX-LENGTH3-B
END-IF
TB-TAMANHO-X(SB)

=
=
=
=
=

ELSE

LENGTH-B
' '
' '
'0'
' '

= '0'
= ' '
= '0'
= ' '
= AX-TAMANHO-X
LENGTH-B
' '
' '
'0'
' '

= '0'
= ' '
= '0'
= ' '
= AX-TAMANHO-X

END-IF
TB-TBNAME-X(SB) =
TB-NAME-X(SB)
=
TB-COLNO-B(SB)
=
TB-COLTYPE-X(SB) =
TB-NULLS-X (SB) =
TB-REMARKS-X (SB)=

TBNAME-X
NAME-X
COLNO-B
COLTYPE-X
NULLS-X
REMARKS-X

*---------------------------------------------------------------------*
*
ACESSA TABELA DE INDICES
*
*---------------------------------------------------------------------*
PEGA-INDEXES-RELACAO. PROC
AX-STEP-X = 'OPEN C02'
SQL OPEN C02
PERFORM ERRO-DB2

EASYTRIEVE
14 Uso de DB2
IX = 0
DO WHILE SQLCODE = 0
PERFORM PEGA-SYSINDEXES
END-DO
AX-STEP-X = 'CLOSE C02'
SQL CLOSE C02
PERFORM ERRO-DB2
AX-STEP-X = 'OPEN C03'
SQL OPEN C03
PERFORM ERRO-DB2
IX = 0
DO WHILE SQLCODE = 0
PERFORM PEGA-RELACAO
END-DO
AX-STEP-X = 'CLOSE C03'
SQL CLOSE C03
PERFORM ERRO-DB2
FLAG = 1
END-PROC
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
PEGA-SYSINDEXES. PROC
AX-STEP-X = 'FETCH C02'
SQL FETCH C02
+
INTO
+
:IXNAME-X
PERFORM ERRO-DB2
IF SQLCODE = 0
SQL OPEN C01
DO WHILE SQLCODE = 0
PERFORM PEGA-SYSKEYS
END-DO
SQL CLOSE C01
END-IF

*
END-PROC
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
PEGA-SYSKEYS. PROC
AX-STEP-X = 'FETCH C01'
SQL FETCH C01
+
INTO
+
:IXNAME-X,
:COLNAME-X,
:ORDERING-X,
:COLNO1-B

+
+
+

EASYTRIEVE
14 Uso de DB2
PERFORM ERRO-DB2
IF SQLCODE = 0
IX = IX + 1
TB-IXNAME-X(IX) = IXNAME-X
TB-COLNAME-X(IX) = COLNAME-X
TB-ORDERING-X(IX) = ORDERING-X
TB-COLNO1-B(IX) = COLNO1-B
END-IF
END-PROC
*---------------------------------------------------------------------*
*
ACESSA TABELA DE RELACIONAMENTO
*
*---------------------------------------------------------------------*
PEGA-RELACAO. PROC
AX-STEP-X = 'FETCH C03'
SQL FETCH C03
+
INTO
+
:REFTBNAME-X
PERFORM ERRO-DB2
IF SQLCODE = 0
IX = IX + 1
TB-RELNAME-X(IX) = REFTBNAME-X
END-IF
END-PROC
*---------------------------------------------------------------------*
*
VERIFICA PARAMETROS
*
*---------------------------------------------------------------------*
INICIAR. PROC
CALL EZTPX01 USING (PARM-REGISTER PARM-AREA)
IF PARM-LENGTH EQ 0
DISPLAY ' '
DISPLAY '+-----------------------------------------------+'
DISPLAY '|
TABELA NAO INFORMADA VIA PARM
|'
DISPLAY '+-----------------------------------------------+'
DISPLAY ' '
STOP
END-IF
CH-TBNAME = PARM-DADOS
T01-DATA-X = SYSDATE
IX = 1
DO WHILE IX LE 100
TB-TBNAME-X (IX) = ' '
TB-NAME-X
(IX) = ' '
TB-COLNO-B
(IX) = 0
TB-COLTYPE-X (IX) = ' '
TB-TAMANHO-X (IX) = ' '
TB-NULLS-X
(IX) = ' '
TB-REMARKS-X (IX) = ' '
TB-IXNAME-X (IX) = ' '
TB-COLNAME-X (IX) = ' '
TB-RELNAME-X (IX) = ' '
TB-ORDERING-X(IX) = ' '
TB-COLNO1-B (IX) = 0
IX = IX + 1

EASYTRIEVE
14 Uso de DB2
END-DO
IX = 0
END-PROC
*---------------------------------------------------------------------*
*
FUNALIZA DESCARREGA TABELA E IMPRIME
*
*---------------------------------------------------------------------*
FINALIZAR. PROC
IF FLAG-OK EQ ' '
DISPLAY ' '
DISPLAY '+-----------------------------------------------+'
DISPLAY '|
TABELA INEXISTENTE NO BANCO DE DADOS
|'
DISPLAY '+-----------------------------------------------+'
DISPLAY ' '
RETURN-CODE = 16
STOP
END-IF
IX = 1
DO WHILE IX LE 100
IF TB-TBNAME-X (IX) NE ' '
PRINT REL01
END-IF
IX = IX + 1
END-DO
END-PROC
*---------------------------------------------------------------------*
*
ROTINA DE ERRO DB2
*
*---------------------------------------------------------------------*
ERRO-DB2. PROC
IF SQLCODE NE 0 ,
100
DISPLAY 'ERRO OCORREU NO ' AX-STEP-X
DISPLAY 'ERRO DE ACESSO DB2, SQLCODE = ' SQLCODE
STOP
END-IF
END-PROC
*
*---------------------------------------------------------------------*
* RELATORIO
*---------------------------------------------------------------------*
REPORT REL01 PRINTER REL01 NOADJUST NODATE NOPAGE SPACE 1
*
TITLE 01 'EMPRESA S/A
LAY-OUT TABELA ' TBNAME-X
TITLE 02 '-----------------------------------------'
*
LINE 01
+
TB-NAME-X
(IX) +
TB-REMARKS-Y (IX) +
TB-COLNO-B
(IX) +
TB-COLTYPE-X (IX) +
TB-TAMANHO-X (IX) +
TB-NULLS-X
(IX)
*
*LINE 01
+

EASYTRIEVE
14 Uso de DB2
*
TB-NAME-X
(IX) +
*
TB-REMARKS-Y (IX) +
*
TB-COLNO-B
(IX) +
*
TB-COLTYPE-X (IX) +
*
TB-TAMANHO-X (IX) +
*
TB-NULLS-X
(IX) +
*
TB-IXNAME-X (IX) +
*
TB-COLNAME-X (IX) +
*
TB-ORDERING-X(IX) +
*
TB-COLNO1-B (IX) +
*
TB-RELNAME-X (IX)
END
//SAIDAS
DD *
1EMPRESA S/A
LAY-OUT TABELA ACT0001
----------------------------------------COL
DESC
SQ
TP
-------0NRFILIAL NUMERO FILIAL
1 DECIMAL
CDCIDADE CODIGO CIDADE
2 SMALLINT
CDNOMEFA CODIGO NOME FANTASIA
3 SMALLINT
TPFRANQU TIPO FRANQUIA
4 SMALLINT
CDOFERTA CODIGO OFERTA
5 SMALLINT
INGRHEAD INDICADOR GROUP HEAD
6 CHAR

TAM
--3
2
2
2
2
1

NUL
--N
N
N
N
N
N

EASYTRIEVE
14 Uso de DB2

Exemplo 033
Uso DB2
//DS029033 JOB CLASS=D,MSGCLASS=X,REGION=4M,COND=(00,NE)
//*----------------------------------------------------------------//EZDB2
EXEC PGM=EZTPA00
//*----------------------------------------------------------------//STEPLIB
INCLUDE MEMBER=STEPDES
//SORTWK1
DD UNIT=3390,SPACE=(TRK,(100,20),RLSE)
//EZTVFM
DD UNIT=3390,SPACE=(TRK,(100,20),RLSE)
//RELAT1
DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 033
********************************************************
* LISTA TODAS AS TABELAS DA BASE DE DADOS, SUMARIZANDO QTDD COLUNAS,
* TANTO VIA JOB INPUT SQL QUANTO VIA JOB NORMAL
********************************************************
*--------------------------* PARM PARA INDICAR QUAL BASE DE DADOS
*--------------------------PARM DB2SSID('DBD1')
*--------------------------* DECLARACAO FILE PRINTER
*--------------------------FILE RELAT1 PRINTER
*--------------------------* DECLARACAO AREAS DE TRABALHO
*--------------------------TBNAME-X
W 09 A
VALUE '
' HEADING ('TABELA')
WOPERACAO W 10 A
WSQLCODE
W 8 N 0 MASK ('ZZZZZZZ9-')
WCOLUNAS
W 4 N
MASK ('ZZZ9')
*--------------------------* DECLARACAO CURSOR PARA SYSCOLUMNS
*--------------------------*
SQL DECLARE C04 CURSOR FOR SELECT
+
TBNAME
+
FROM SYSIBM.SYSCOLUMNS
+
ORDER BY TBNAME
*
**********************************************************************
* ATIVIDADE JOB INPUT SQL
**********************************************************************
JOB INPUT SQL
SELECT
TBNAME
+
FROM SYSIBM.SYSCOLUMNS
+
ORDER BY TBNAME
+
INTO :TBNAME-X
PERFORM ERRO-DB2
PRINT RELAT1

EASYTRIEVE
14 Uso de DB2
GO TO JOB
*-------------------*
* TESTA ERRO DB2
*-------------------*
ERRO-DB2. PROC
IF SQLCODE NE 0 100
DISPLAY 'ERRO NO SELECT SQLCODE = ' SQLCODE
STOP
END-IF
END-PROC
*-------------------*
* DECLARACAO RELATORIO
*-------------------*
REPORT RELAT1 PRINTER RELAT1 NOADJUST NODATE SUMMARY
SEQUENCE TBNAME-X
CONTROL TBNAME-X
TITLE 01 COL 1 'TABELAS DESENV JOB INPUT SQL'
HEADING TALLY ('COLUNAS')
LINE 01 TBNAME-X TALLY
**********************************************************************
* ATIVIDADE JOB INPUT NULL
**********************************************************************
JOB INPUT NULL
TBNAME-X = 'SYSCOLUMNS'
WSQLCODE = 0
C04-OPEN
WOPERACAO = 'OPEN
SQL OPEN C04
PERFORM ERRO-DB2

C04'

C04-FETCH
WCOLUNAS = 0
DO WHILE WSQLCODE EQ 0
WOPERACAO = 'FETCH C04'
SQL FETCH C04
+
INTO
+
:TBNAME-X
PERFORM ERRO-DB2
IF WSQLCODE NE 0
IF WCOLUNAS NE 0
GO TO C04-CLOSE
END-IF
ELSE
PRINT RELAT1
WCOLUNAS
= WCOLUNAS + 1
END-IF
END-DO
C04-CLOSE
WOPERACAO = 'CLOSE C04'
SQL CLOSE C04
PERFORM ERRO-DB2
*
STOP
*-------------------*
* TESTA ERRO DB2

EASYTRIEVE
14 Uso de DB2
*-------------------*
ERRO-DB2. PROC
IF SQLCODE NE 0 100
DISPLAY 'ERRO NO ' WOPERACAO ' SQLCODE = ' SQLCODE
STOP
END-IF
WSQLCODE = SQLCODE
END-PROC
*-------------------*
* DECLARACAO RELATORIO
*-------------------*
REPORT RELAT1 PRINTER RELAT1 NOADJUST NODATE SUMMARY
SEQUENCE TBNAME-X
CONTROL TBNAME-X
TITLE 01 COL 1 'TABELAS DESENV JOB INPUT NULL'
HEADING TALLY ('COLUNAS')
LINE 01 TBNAME-X TALLY
//SAIDAS DD *
1TABELAS DESENV JOB INPUT SQL
TABELA
COLUNAS
.
.
.
STRUCTURE
104
SUMAMT
128
SUMMARY
180
SUMMAST
57
SUMMAST_L
14
SUMMFORM
90
SUPPLIER
7
SUPPLIER_
18
SYSCHECKD
5
SYSCHECKS
10
SYSCOLAUT
15
SYSCOLDIS
25
SYSCOLSTA
12
SYSCOLUMN
22
SYSCOPY
19
SYSDATABA
17
SYSDBAUTH
25
SYSDBRM
16
SYSDUMMY1
1
SYSFIELDS
13
SYSFOREIG
7
SYSINDEXE
35
SYSINDEXP
23
SYSINDEXS
13
SYSKEYS
7
SYSLINKS
12
SYSPACKAG
37
SYSPACKAU
13
SYSPACKDE
8
SYSPACKLI
7
SYSPACKST
13
SYSPKSYST
8
SYSPLAN
33

EASYTRIEVE
14 Uso de DB2
SYSPLANAU
SYSPLANDE
SYSPLSYST
SYSPRINT
SYSPROCED
SYSRELS
SYSRESAUT
SYSSTMT
SYSSTOGRO
SYSSTRING
SYSSYNONY
SYSTABAUT
SYSTABLEP
SYSTABLES
SYSTABSTA
SYSUSERAU
SYSVIEWDE
SYSVIEWS
SYSVLTREE
SYSVOLUME
SYSVTREE
TAB0001
TAB0002
TAB0003
.
.
.

12
5
5
2
17
13
13
10
11
8
7
28
27
77
12
31
6
6
2
4
5
8
3
3

53350

1TABELAS DESENV JOB INPUT NULL


TABELA
COLUNAS
.
.
.
STRUCTURE
104
SUMAMT
128
SUMMARY
180
SUMMAST
57
SUMMAST_L
14
SUMMFORM
90
SUPPLIER
7
SUPPLIER_
18
SYSCHECKD
5
SYSCHECKS
10
SYSCOLAUT
15
SYSCOLDIS
25
SYSCOLSTA
12
SYSCOLUMN
22
SYSCOPY
19
SYSDATABA
17
SYSDBAUTH
25
SYSDBRM
16
SYSDUMMY1
1
SYSFIELDS
13
SYSFOREIG
7
SYSINDEXE
35

EASYTRIEVE
14 Uso de DB2
SYSINDEXP
SYSINDEXS
SYSKEYS
SYSLINKS
SYSPACKAG
SYSPACKAU
SYSPACKDE
SYSPACKLI
SYSPACKST
SYSPKSYST
SYSPLAN
SYSPLANAU
SYSPLANDE
SYSPLSYST
SYSPRINT
SYSPROCED
SYSRELS
SYSRESAUT
SYSSTMT
SYSSTOGRO
SYSSTRING
SYSSYNONY
SYSTABAUT
SYSTABLEP
SYSTABLES
SYSTABSTA
SYSUSERAU
SYSVIEWDE
SYSVIEWS
SYSVLTREE
SYSVOLUME
SYSVTREE
TAB0001
TAB0002
TAB0003
.
.
.

23
13
7
12
37
13
8
7
13
8
33
12
5
5
2
17
13
13
10
11
8
7
28
27
77
12
31
6
6
2
4
5
8
3
3

53350

15 - Dicas gerais : problemas mais comuns e outros tpicos


a) Resultados de acumulao aparentemente errados
Campos W tem o contedo colocado como est em tempo de PRINT.
Campos S tem o contedo colocado como est o ltimo contedo.
Exemplo 034
Resultados de acumulao aparentemente errados
//DS029034 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//*--------------------------------------------------------------//STEPEASY EXEC PGM=EZTPA00
//ENTRA
DD *
ALBERTO
198802290000001000
ZIGOMAR
200105300000001000
MAFALDA
200010150000001000
VALDICE
199912230000001000
VALDICE
199912230000001000
VALDICE
199912230000001000
VALDICE
199912230000001000
VALDICE
199912230000001000
VALDICE
199912230000001000
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 034
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS E RESPECTIVAS AREAS DE I/O
*-------------------------------------------------FILE SYSREL PRINTER
FILE ENTRA
AL
1 80 A
AL-NOME
1 15 A
AL-DATA
16 08 N
AL-SALDO
24 10 N 2
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WLL
W
7
N
WGG
W
7
N
WSALDOAC W 10
N 2 MASK ('ZZZZZZZ9,99')
SSALDOAC S 10
N 2 MASK ('ZZZZZZZ9,99')
*-------------------------------------------------* DECLARACAO DE PROCEDIMENTOS
*-------------------------------------------------*------------* ROTINA PRINCIPAL
*------------JOB INPUT ENTRA
WLL = WLL + 1
WSALDOAC = WSALDOAC + AL-SALDO
SSALDOAC = SSALDOAC + AL-SALDO

EASYTRIEVE
15 Dicas gerais a) Resultados de acumulao aparentemente errados
PRINT RELAT1
PRINT RELAT2
GO TO JOB
*------------* DECLARACAO DO RELATORIO 1 - SEM SEQUENCE
*------------REPORT RELAT1 PRINTER SYSREL NOADJUST SPACE 1
CONTROL FINAL
TITLE 1 '
PROGRAMA EXEMPLO 034'
TITLE 2 '
RELAT1 - SEM SEQUENCE'
LINE 1 AL-NOME AL-DATA AL-SALDO WSALDOAC SSALDOAC
*------------* DECLARACAO DO RELATORIO 2 - COM SEQUENCE
*------------REPORT RELAT2 PRINTER SYSREL NOADJUST SPACE 1
SEQUENCE AL-DATA
CONTROL FINAL
TITLE 1 '
PROGRAMA EXEMPLO 034'
TITLE 2 '
RELAT2 - COM SEQUENCE'
LINE 1 AL-NOME AL-DATA AL-SALDO WSALDOAC SSALDOAC
********************************************************
* FIM **************************************************
********************************************************
//SYSREL
DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//SAIDAS
DD *
129/05/01
PROGRAMA EXEMPLO 034
RELAT1 - SEM SEQUENCE
AL-NOME
AL-DATA
AL-SALDO
WSALDOAC
0ALBERTO
19880229
10,00
10,00
ZIGOMAR
20010530
10,00
20,00
MAFALDA
20001015
10,00
30,00
VALDICE
19991223
10,00
40,00
VALDICE
19991223
10,00
50,00
VALDICE
19991223
10,00
60,00
VALDICE
19991223
10,00
70,00
VALDICE
19991223
10,00
80,00
VALDICE
19991223
10,00
90,00
90,00
450,00
129/05/01
PROGRAMA EXEMPLO 034
RELAT2 - COM SEQUENCE
AL-NOME
AL-DATA
AL-SALDO
WSALDOAC
0ALBERTO
19880229
10,00
10,00
VALDICE
19991223
10,00
40,00
VALDICE
19991223
10,00
50,00
VALDICE
19991223
10,00
60,00
VALDICE
19991223
10,00
70,00
VALDICE
19991223
10,00
80,00
VALDICE
19991223
10,00
90,00
MAFALDA
20001015
10,00
30,00
ZIGOMAR
20010530
10,00
20,00
90,00
450,00

SSALDOAC
10,00
20,00
30,00
40,00
50,00
60,00
70,00
80,00
90,00

SSALDOAC
90,00
90,00
90,00
90,00
90,00
90,00
90,00
90,00
90,00

EASYTRIEVE
15 Dicas gerais a) Resultados de acumulao aparentemente errados

b) Campos no so totalizados
S totaliza campos que tenham nmero de decimais especificado (se necessrio, colocar zero).
Exemplo 035
Campos no totalizados
//DS029035 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//*--------------------------------------------------------------//STEPEASY EXEC PGM=EZTPA00
//ENTRA
DD *
ALBERTO
19880229 0000010001 00100 012 006
ALBERTO
19880229 0000010001 00100 012 006
ZIGOMAR
20010530 0000000010 00020 123 012
ZIGOMAR
20010530 0000000010 00020 123 012
MAFALDA
20001015 0000000100 00340 456 024
MAFALDA
20001015 0000000100 00340 456 024
VALDICE
19991223 0000001000 05678 789 036
VALDICE
19991223 0000001000 05678 789 036
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 035
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS E RESPECTIVAS AREAS DE I/O
*-------------------------------------------------FILE SYSREL PRINTER
FILE ENTRA
AL
1 80 A
AL-NOME
1 15 A
AL-DATA
16 08 N
AL-VTOT
25 10 N 2
AL-VUNI
36 5 N 2
AL-COD
42 3 N
AL-QPACOT
46 3 N 0
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WLL
W
7
N
WII
W
7
N
*-------------------------------------------------* DECLARACAO DE PROCEDIMENTOS
*-------------------------------------------------*------------* ROTINA PRINCIPAL
*------------JOB INPUT ENTRA FINISH ESTATIS
WLL = WLL + 1
PRINT RELAT01
PRINT RELAT02
PRINT RELAT03
GO TO JOB

EASYTRIEVE
15 Dicas gerais a) Resultados de acumulao aparentemente errados
*------------* ROTINA DE FINALIZACAO
*------------ESTATIS. PROC
DISPLAY '************************************'
DISPLAY 'COPIA OK ! '
DISPLAY '************************************'
END-PROC
*------------* DECLARACAO DO RELATORIO 01
*------------REPORT RELAT01 PRINTER SYSREL NOADJUST SPACE 1
CONTROL FINAL
TITLE 1 '
PROGRAMA EXEMPLO 035 RELAT01'
LINE 1 AL-NOME AL-DATA AL-VTOT AL-VUNI AL-COD AL-QPACOT
*------------* DECLARACAO DO RELATORIO 02
*------------REPORT RELAT02 PRINTER SYSREL NOADJUST SPACE 1
CONTROL FINAL
SUM
AL-VUNI
TITLE 1 '
PROGRAMA EXEMPLO 035 RELAT02'
LINE 1 AL-NOME AL-DATA AL-VTOT AL-VUNI AL-COD AL-QPACOT
*------------* DECLARACAO DO RELATORIO 03
*------------REPORT RELAT03 PRINTER SYSREL NOADJUST SPACE 1
CONTROL FINAL
SUM AL-VUNI AL-QPACOT . * AL-COD, SE COLOCADO, DAH ERRO DE COMPILACAO
TITLE 1 '
PROGRAMA EXEMPLO 035 RELAT03'
LINE 1 AL-NOME AL-DATA AL-VTOT AL-VUNI AL-COD AL-QPACOT
********************************************************
* FIM **************************************************
********************************************************
//SYSREL
DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//SAIDAS
DD *
129/05/01
PROGRAMA EXEMPLO 035 RELAT01
AL-NOME
AL-DATA
AL-VTOT
AL-VUNI
AL-COD AL-QPACOT
0ALBERTO
19880229
100,01
1,00
012
6
ALBERTO
19880229
100,01
1,00
012
6
ZIGOMAR
20010530
,10
,20
123
12
ZIGOMAR
20010530
,10
,20
123
12
MAFALDA
20001015
1,00
3,40
456
24
MAFALDA
20001015
1,00
3,40
456
24
VALDICE
19991223
10,00
56,78
789
36
VALDICE
19991223
10,00
56,78
789
36
222,22
122,76
156
129/05/01
PROGRAMA EXEMPLO 035 RELAT02
AL-NOME
AL-DATA
AL-VTOT
AL-VUNI
AL-COD AL-QPACOT
0ALBERTO
19880229
100,01
1,00
012
6
ALBERTO
19880229
100,01
1,00
012
6

EASYTRIEVE
15 Dicas gerais a) Resultados de acumulao aparentemente errados
ZIGOMAR
ZIGOMAR
MAFALDA
MAFALDA
VALDICE
VALDICE
129/05/01
AL-NOME
0ALBERTO
ALBERTO
ZIGOMAR
ZIGOMAR
MAFALDA
MAFALDA
VALDICE
VALDICE

20010530
20010530
20001015
20001015
19991223
19991223

,10
,10
1,00
1,00
10,00
10,00

,20
,20
3,40
3,40
56,78
56,78
122,76
PROGRAMA EXEMPLO 035 RELAT03

AL-DATA
19880229
19880229
20010530
20010530
20001015
20001015
19991223
19991223

AL-VTOT
100,01
100,01
,10
,10
1,00
1,00
10,00
10,00

AL-VUNI
1,00
1,00
,20
,20
3,40
3,40
56,78
56,78
122,76

123
123
456
456
789
789

12
12
24
24
36
36

AL-COD AL-QPACOT
012
6
012
6
123
12
123
12
456
24
456
24
789
36
789
36
156

c) Uso de TALLY no aceito; TALLY para sumarizar


TALLY s pode ser especificado se tiver CONTROL.
Exemplo 036
Tally
//DS029036 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//*--------------------------------------------------------------//STEPEASY EXEC PGM=EZTPA00
//ENTRA
DD *
ALBERTO
19880229 0000010001 00100 012 006
ALBERTO
19880229 0000010001 00100 012 006
ZIGOMAR
20010530 0000000010 00020 123 012
ZIGOMAR
20010530 0000000010 00020 123 012
MAFALDA
20001015 0000000100 00340 456 024
MAFALDA
20001015 0000000100 00340 456 024
VALDICE
19991223 0000001000 05678 789 036
VALDICE
19991223 0000001000 05678 789 036
//EZTVFM
DD UNIT=SYSDA,SPACE=(TRK,(800,80),RLSE)
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 036
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS E RESPECTIVAS AREAS DE I/O
*-------------------------------------------------FILE SYSREL PRINTER
FILE ENTRA
AL
1 80 A
AL-NOME
1 15 A
AL-DATA
16 08 N
AL-VTOT
25 10 N 2
AL-VUNI
36 5 N 2
AL-COD
42 3 N
AL-QPACOT
46 3 N 0
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WLL
W
7
N
WII
W
7
N
*-------------------------------------------------* DECLARACAO DE PROCEDIMENTOS
*-------------------------------------------------JOB INPUT ENTRA
WLL = WLL + 1
PRINT RELAT01
PRINT RELAT02
PRINT RELAT03
PRINT RELAT04
PRINT RELAT05
GO TO JOB
*------------* DECLARACAO DO RELATORIO 01
*-------------

EASYTRIEVE
15 Dicas gerais c) Uso de Tally no aceito; Tally para sumarizar
REPORT RELAT01 PRINTER SYSREL NOADJUST SPACE 1
TITLE 1 '
PROGRAMA EXEMPLO 036 RELAT01'
* USAR TALLY SEM CONTROL, DAH ERRO DE COMPILACAO
*LINE 1 TALLY AL-NOME AL-DATA AL-VTOT AL-VUNI
LINE 1 AL-NOME AL-DATA AL-VTOT AL-VUNI
*------------* DECLARACAO DO RELATORIO 02
*------------REPORT RELAT02 PRINTER SYSREL NOADJUST SPACE 1
SEQUENCE AL-VTOT
TITLE 1 '
PROGRAMA EXEMPLO 036 RELAT02'
* USAR TALLY SEM CONTROL, DAH ERRO DE COMPILACAO
*LINE 1 TALLY AL-NOME AL-DATA AL-VTOT AL-VUNI
LINE 1 AL-NOME AL-DATA AL-VTOT AL-VUNI
*------------* DECLARACAO DO RELATORIO 03
*------------REPORT RELAT03 PRINTER SYSREL NOADJUST SPACE 1
CONTROL FINAL
TITLE 1 '
PROGRAMA EXEMPLO 036 RELAT03'
* USAR TALLY COM CONTROL, OK
LINE 1 TALLY AL-NOME AL-DATA AL-VTOT AL-VUNI
*------------* DECLARACAO DO RELATORIO 04
*------------REPORT RELAT04 PRINTER SYSREL NOADJUST SPACE 1
SEQUENCE AL-VTOT
CONTROL FINAL
TITLE 1 '
PROGRAMA EXEMPLO 036 RELAT04'
* USAR TALLY COM CONTROL, OK
LINE 1 TALLY AL-NOME AL-DATA AL-VTOT AL-VUNI
*------------* DECLARACAO DO RELATORIO 05
*------------REPORT RELAT05 PRINTER SYSREL NOADJUST SPACE 1 SUMMARY
SEQUENCE AL-DATA
*CONTROL AL-DATA FINAL . * FINAL EH DEFAULT SE TIVER ALGUM CAMPO
*
ESPECIFICADO. SE COLOCAR AQUI, DAH ERRO
CONTROL AL-DATA
TITLE 1 '
PROGRAMA EXEMPLO 036 RELAT05'
TITLE 2 'USO DO TALLY PARA SUMARIZAR OCORRENCIAS DO CONTEUDO DE UM +
CAMPO NUM ARQUIVO'
LINE 1 TALLY AL-DATA
********************************************************
* FIM **************************************************
********************************************************
//SYSREL
DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//SAIDAS
DD *
1 4/06/01
PROGRAMA EXEMPLO 036 RELAT01
AL-NOME
AL-DATA
AL-VTOT
AL-VUNI
0ALBERTO
19880229
100,01
1,00
ALBERTO
19880229
100,01
1,00

EASYTRIEVE
15 Dicas gerais c) Uso de Tally no aceito; Tally para sumarizar
ZIGOMAR
20010530
,10
,20
ZIGOMAR
20010530
,10
,20
MAFALDA
20001015
1,00
3,40
MAFALDA
20001015
1,00
3,40
VALDICE
19991223
10,00
56,78
VALDICE
19991223
10,00
56,78
1 4/06/01
PROGRAMA EXEMPLO 036 RELAT02
AL-NOME
AL-DATA
AL-VTOT
AL-VUNI
0ZIGOMAR
20010530
,10
,20
ZIGOMAR
20010530
,10
,20
MAFALDA
20001015
1,00
3,40
MAFALDA
20001015
1,00
3,40
VALDICE
19991223
10,00
56,78
VALDICE
19991223
10,00
56,78
ALBERTO
19880229
100,01
1,00
ALBERTO
19880229
100,01
1,00
1 4/06/01
PROGRAMA EXEMPLO 036 RELAT03
TALLY
AL-NOME
AL-DATA
AL-VTOT
AL-VUNI
0
ALBERTO
19880229
100,01
1,00
ALBERTO
19880229
100,01
1,00
ZIGOMAR
20010530
,10
,20
ZIGOMAR
20010530
,10
,20
MAFALDA
20001015
1,00
3,40
MAFALDA
20001015
1,00
3,40
VALDICE
19991223
10,00
56,78
VALDICE
19991223
10,00
56,78
8
222,22
122,76
1 4/06/01
PROGRAMA EXEMPLO 036 RELAT04
TALLY
AL-NOME
AL-DATA
AL-VTOT
AL-VUNI
0
ZIGOMAR
20010530
,10
,20
ZIGOMAR
20010530
,10
,20
MAFALDA
20001015
1,00
3,40
MAFALDA
20001015
1,00
3,40
VALDICE
19991223
10,00
56,78
VALDICE
19991223
10,00
56,78
ALBERTO
19880229
100,01
1,00
ALBERTO
19880229
100,01
1,00
8
222,22
122,76
1 4/06/01
PROGRAMA EXEMPLO 036 RELAT05
USO DO TALLY PARA SUMARIZAR OCORRENCIAS DO CONTEUDO DE UM CAMPO NUM ARQUIVO
TALLY AL-DATA
0
2 19880229
2 19991223
2 20001015
2 20010530
8

EASYTRIEVE
15 Dicas gerais c) Uso de Tally no aceito; Tally para sumarizar

d) Trocar sinal de um campo compactado ou zonado


s vezes, temos um campo positivo com sinal F, mas precisamos que seja C, ou vice-versa.
Para efetuar o teste e eventual troca, podemos fazer conforme o exemplo a seguir.
Exemplo 037
Manipulao de sinal
//DS029037 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//*--------------------------------------------------------------//STEPEASY EXEC PGM=EZTPA00
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 037
********************************************************
*-------------------------------------------------* DECLARACAO DE ARQUIVOS E RESPECTIVAS AREAS DE I/O
*-------------------------------------------------FILE SYSREL PRINTER
*-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO
*-------------------------------------------------WNROZONADO W 5
N MASK HEX
WNROZULTDIR WNROZONADO +4 1 B
WNROCOMPAC W 5
P MASK HEX
WNROPULTDIR WNROCOMPAC +4 1 B
*-------------------------------------------------* DECLARACAO DE PROCEDIMENTOS
*-------------------------------------------------*------------* ROTINA PRINCIPAL
*------------JOB INPUT NULL
WNROZONADO = 12345
IF WNROZULTDIR ON X'C0'
DISPLAY 'WNROZONADO COM SINAL F : ' WNROZONADO
WNROZULTDIR = WNROZULTDIR - 48
DISPLAY 'WNROZONADO MUDOU PARA : ' WNROZONADO
END-IF
IF WNROZULTDIR ON X'F0'
DISPLAY 'WNROZONADO COM SINAL C : ' WNROZONADO
WNROZULTDIR = WNROZULTDIR + 48
DISPLAY 'WNROZONADO MUDOU PARA : ' WNROZONADO
END-IF
*------------* SABE O QUE EH 48? EH X'30', A DIFERENCA ENTRE X'F0' E X'C0'
*------------WNROCOMPAC = 123456789
IF WNROPULTDIR ON X'0C'
DISPLAY 'WNROCOMPAC COM SINAL F : ' WNROCOMPAC
WNROPULTDIR = WNROPULTDIR - 3
DISPLAY 'WNROCOMPAC MUDOU PARA : ' WNROCOMPAC
END-IF
IF WNROPULTDIR ON X'0F'

EASYTRIEVE
15 Dicas gerais d) Trocar sinal de um campo compactado ou zonado
DISPLAY 'WNROCOMPAC COM SINAL C : ' WNROCOMPAC
WNROPULTDIR = WNROPULTDIR + 3
DISPLAY 'WNROCOMPAC MUDOU PARA : ' WNROCOMPAC
END-IF
*------------* SABE O QUE EH 3? EH X'03', A DIFERENCA ENTRE X'0F' E X'0C'
*------------STOP
********************************************************
* FIM **************************************************
********************************************************
//SYSREL
DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//SAIDAS
DD *
WNROZONADO COM SINAL F : F1F2F3F4F5
WNROZONADO MUDOU PARA : F1F2F3F4C5
WNROCOMPAC COM SINAL F : 123456789F
WNROCOMPAC MUDOU PARA : 123456789C

e) Instrues aparentemente executadas erradas


Muitas vezes, um sinal C ou D num campo numrico, aliado ao uso de um campo declarado
como numrico ou alfa, pode nos fazer pensar que uma instruo est sendo executada de forma
errada.
Exemplo 038
Pegadinhas referentes a sinal
//DS029038 JOB ,ALBERTO.ROMANO,CLASS=D,MSGCLASS=X
//*--------------------------------------------------------------//STEPEASY EXEC PGM=EZTPA00
//ENTRA
DD *
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
G
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//SYSIN
DD *
********************************************************
* PROGRAMA EXEMPLO 038
********************************************************
FILE ENTRA
ALENTRA 1 80 A
ALCODN
1 1 N
ALCODA
1 1 A
********************************************************
JOB INPUT ENTRA
DISPLAY '***************************************'
*--------* FAZ REFERENCIA AA DECLARACAO NUMERICA
*--------IF
ALCODN NOT NUMERIC
DISPLAY 'COD NAO NUMERICO'
END-IF
IF
ALCODN EQ 0
DISPLAY 'ALCODN=' ALCODN ' ENTENDIDO COMO 0'
ELSE-IF ALCODN EQ 1
DISPLAY 'ALCODN=' ALCODN ' ENTENDIDO COMO 1'

EASYTRIEVE
15 Dicas gerais f) Abends na execuo
ELSE-IF ALCODN EQ 2
DISPLAY 'ALCODN=' ALCODN ' ENTENDIDO COMO 2'
ELSE-IF ALCODN EQ 3
DISPLAY 'ALCODN=' ALCODN ' ENTENDIDO COMO 3'
ELSE-IF ALCODN EQ 4
DISPLAY 'ALCODN=' ALCODN ' ENTENDIDO COMO 4'
ELSE-IF ALCODN EQ 5
DISPLAY 'ALCODN=' ALCODN ' ENTENDIDO COMO 5'
ELSE-IF ALCODN EQ 6
DISPLAY 'ALCODN=' ALCODN ' ENTENDIDO COMO 6'
ELSE-IF ALCODN EQ 7
DISPLAY 'ALCODN=' ALCODN ' ENTENDIDO COMO 7'
ELSE-IF ALCODN EQ 8
DISPLAY 'ALCODN=' ALCODN ' ENTENDIDO COMO 8'
ELSE-IF ALCODN EQ 9
DISPLAY 'ALCODN=' ALCODN ' ENTENDIDO COMO 9'
ELSE
DISPLAY 'ALCODN=' ALCODN ' ENTENDIDO N.D.A.'
END-IF
*--------* FAZ REFERENCIA AA DECLARACAO ALFA
*--------IF
ALCODA NOT NUMERIC
DISPLAY 'COD NAO NUMERICO'
END-IF
IF
ALCODA EQ '0'
DISPLAY 'ALCODA=' ALCODA ' ENTENDIDO COMO 0'
ELSE-IF ALCODA EQ '1'
DISPLAY 'ALCODA=' ALCODA ' ENTENDIDO COMO 1'
ELSE-IF ALCODA EQ '2'
DISPLAY 'ALCODA=' ALCODA ' ENTENDIDO COMO 2'
ELSE-IF ALCODA EQ '3'
DISPLAY 'ALCODA=' ALCODA ' ENTENDIDO COMO 3'
ELSE-IF ALCODA EQ '4'
DISPLAY 'ALCODA=' ALCODA ' ENTENDIDO COMO 4'
ELSE-IF ALCODA EQ '5'
DISPLAY 'ALCODA=' ALCODA ' ENTENDIDO COMO 5'
ELSE-IF ALCODA EQ '6'
DISPLAY 'ALCODA=' ALCODA ' ENTENDIDO COMO 6'
ELSE-IF ALCODA EQ '7'
DISPLAY 'ALCODA=' ALCODA ' ENTENDIDO COMO 7'
ELSE-IF ALCODA EQ '8'
DISPLAY 'ALCODA=' ALCODA ' ENTENDIDO COMO 8'
ELSE-IF ALCODA EQ '9'
DISPLAY 'ALCODA=' ALCODA ' ENTENDIDO COMO 9'
ELSE
DISPLAY 'ALCODA=' ALCODA ' ENTENDIDO N.D.A.'
END-IF
GO TO JOB
//SAIDAS DD *
***************************************
ALCODN=0 ENTENDIDO COMO 0
ALCODA=0 ENTENDIDO COMO 0
***************************************
ALCODN=1 ENTENDIDO COMO 1
ALCODA=1 ENTENDIDO COMO 1
***************************************

EASYTRIEVE
15 Dicas gerais f) Abends na execuo
ALCODN=2 ENTENDIDO COMO 2
ALCODA=2 ENTENDIDO COMO 2
***************************************
ALCODN=3 ENTENDIDO COMO 3
ALCODA=3 ENTENDIDO COMO 3
***************************************
ALCODN=4 ENTENDIDO COMO 4
ALCODA=4 ENTENDIDO COMO 4
***************************************
ALCODN=5 ENTENDIDO COMO 5
ALCODA=5 ENTENDIDO COMO 5
***************************************
ALCODN=6 ENTENDIDO COMO 6
ALCODA=6 ENTENDIDO COMO 6
***************************************
ALCODN=7 ENTENDIDO COMO 7
ALCODA=7 ENTENDIDO COMO 7
***************************************
ALCODN=8 ENTENDIDO COMO 8
ALCODA=8 ENTENDIDO COMO 8
***************************************
ALCODN=9 ENTENDIDO COMO 9
ALCODA=9 ENTENDIDO COMO 9
***************************************
COD NAO NUMERICO
ALCODN=1 ENTENDIDO COMO 1
COD NAO NUMERICO
ALCODA=A ENTENDIDO N.D.A.
***************************************
COD NAO NUMERICO
ALCODN=2 ENTENDIDO COMO 2
COD NAO NUMERICO
ALCODA=B ENTENDIDO N.D.A.
***************************************
COD NAO NUMERICO
ALCODN=3 ENTENDIDO COMO 3
COD NAO NUMERICO
ALCODA=C ENTENDIDO N.D.A.
***************************************
COD NAO NUMERICO
ALCODN=4 ENTENDIDO COMO 4
COD NAO NUMERICO
ALCODA=D ENTENDIDO N.D.A.
***************************************
COD NAO NUMERICO
ALCODN=5 ENTENDIDO COMO 5
COD NAO NUMERICO
ALCODA=E ENTENDIDO N.D.A.
***************************************
COD NAO NUMERICO
ALCODN=6 ENTENDIDO COMO 6
COD NAO NUMERICO
ALCODA=F ENTENDIDO N.D.A.
***************************************
COD NAO NUMERICO
ALCODN=7 ENTENDIDO COMO 7
COD NAO NUMERICO

EASYTRIEVE
15 Dicas gerais f) Abends na execuo
ALCODA=G ENTENDIDO N.D.A.

f) Abends na execuo
0C7= Data exception :
Algum campo numrico est sendo manuseado pelo EASY, e seu contedo no numrico.
Normalmente indicado o statement Easy onde o problema ocorreu. Se o statement referir-se a
um REPORT, um campo numrico que se est tentando imprimir, e que no est com contedo
numrico. Mude o(s) campo(s) numrico(s) para alfa (pode-se redefini-los) e faa referncia aos
nomes alfa na(s) LINE(S).
No esquea que pode ser um arquivo com lay-outs diferentes (um header, trailler, etc...).
0C4 = Specification exception :
Verifique
se algum ndice de tabela interna est fora de range ou
se algum arquivo sequencial est com VS
ou
se falta algum DD para um arquivo

g) Arquivos VFM
Arquivos VFM (Virtual File Manager) um mtodo de acesso sequencial bastante apropriado
para manipulao de arquivos de trabalho (temporrios).
Normalmente, quando se usa arquivos de trabalho, cada um deles precisa ter uma definio, tanto
no programa quanto em JCL.
Utilizando VFM, basta declarar todos os arquivos de trabalho como VIRTUAL na especificao
do FILE, e os arquivos so manipulados, dentro do possvel (depende da memria disponvel) em
memria, sem necessidade de especificao em JCL. Caso a memria disponvel no seja
suficiente, uma nica rea em disco utilizada como extenso (atravs do DD EZTVFM).
Arquivos declarados como VIRTUAL so deletados quando seu processamento como input
terminado.
Exemplo :
FILE CADCLI
.
.
.
FILE CADCLIALFA VIRTUAL
.
.
.
SORT CADCLI TO CADCLIALFA USING CLI-NOME
JOB INPUT CADCLIALFA
.
.
.

FIM

Dvidas?
Sugestes?

arschiesari@yahoo.com
OBRIGADO !

EASYTRIEVE
Quick Reference
PARM-REGISTER = para pegar PARM via CALL EZTPX01
Declarao de campos I/O
[DEFINE] [nome-arquivo:]nome-campo pos-inicial tambytes
|A|N|P|U|B| [decimais] [HEADING (...)] [MASK (...)]
Declarao de campos work
[DEFINE] nome-campo W tamanho |A|N|P|U|B| [decimais]
[HEADING (...)] [MASK (...)]
Atividade JOB normal
PARM
FILE arq PRINTER |DEFER|
FILE arqseq-es |DEFER|
FILE arqseq-es VBS maxlrecl [maxblk] [FULLTRK] [DEFER]
FILE arqvs-e VS [DEFER]
FILE arqvs-u VS UPDATE [DEFER]
FILE arqvs-s VS CREATE |NOVERIFY| |RESET| [DEFER]
declarao reas I/O
declarao variveis work
*------------------------------------------JOB INPUT [START proc] [FINISH proc]
JOB INPUT NULL [START proc] [FINISH proc]
JOB INPUT arq [START proc] [FINISH proc]
JOB INPUT arq KEY cpo1 [cpo2...]
comandos
REPORT....
Atividade SORT
PARM
FILE arq PRINTER [DEFER]
FILE arqseq-es [DEFER]
FILE arqseq-es VBS maxlrecl [maxblk] [FULLTRK] [DEFER]
FILE arqvs-e VS [DEFER]
FILE arqvs-u VS UPDATE [DEFER]
FILE arqvs-s VS CREATE |NOVERIFY| |RESET|
[DEFER]
declarao reas I/O
declarao variveis work
*------------------------------------------SORT arq1 TO arq2 USING campo1 [D] [BEFORE proc] +
[SIZE literal1] [WORK literal2]
comandos, exceto de I/O (s DISPLAY sem nomearq)
Atividade JOB INPUT SQL
PARM
FILE arq PRINTER |DEFER|
FILE arqseq-es |DEFER|
FILE arqseq-es VBS maxlrecl [maxblk] [FULLTRK| |DEFER|
FILE arqvs-e VS |DEFER|
FILE arqvs-u VS UPDATE |DEFER|
FILE arqvs-s VS CREATE |NOVERIFY| |RESET| |DEFER|
declarao reas I/O
declarao variveis work
*------------------------------------------JOB INPUT SQL [START proc1] [FINISH proc2]
SELECT coluna1 [, coluna2..... , colunan ] +
FROM nometabela
+
[WHERE condio]
+
[ORDER coluna1 [... , colunan] ] +
INTO :campo1 [ ... , campon]
comandos
REPORT ....

REPORT
REPORT nome-relatorio
+
[SUMMARY]
+
[SUMFILE]
+
[SUMSPACE]
+
[TALLYSIZE]
+
[DTLCTL |EVERY|FIRST|NONE|]
+
[SUMCTL ([x] [y])]
+
[LABELS [ACROSS literal] ]
+
[DOWN literal SIZE literal NEWPAGE]+
[FILE nome-arquivo]
+
[PRINTER nome-arquivo]
+
[PAGESIZE literal literal]
+
[LINESIZE literal]
+
[SKIP literal]
+
[SPACE literal]
+
[TITLESKIP literal]
+
[| SPREAD | NOSPREAD |]
+
[NOADJUST]
+
[| NODATE | NOKDATE |]
+
[| NOPAGE | NOKPAGE |]
+
[NOHEADING]
+
[LIMIT literal]
+
[EVERY literal]
SEQUENCE campo1 [D] campo2 [D] ...
CONTROL cpo1 [D] ... |FINAL| |NEWPAGE|
+
|RENUM| |NOPRINT|
SUM campo1 [campo2 ... campon]
TITLE nrolin |cpo| literal |+nro|-nro| [COL nro]
HEADING campo (xxx [yyy ...])
LINE nrolin |cpo|literal |+nro|-nro| [|COL|POS| nro]
*------------------------------------------REPORT-INPUT. PROC
...
END-PROC
*------------------------------------------BEFORE-LINE. PROC
...
END-PROC
*------------------------------------------AFTER-LINE. PROC
...
END-PROC
*------------------------------------------BEFORE-BREAK. PROC
...
END-PROC
*------------------------------------------AFTER-BREAK. PROC
...
END-PROC
*------------------------------------------ENDPAGE. PROC
...
END-PROC
*------------------------------------------TERMINATION. PROC
...
END-PROC
*-------------------------------------------

Variveis EASY
SYSDATE = AA/MM/DD
RETURN-CODE = uso JCL
RECORD-COUNT = qt regs
LEVEL = qual quebra

SYSTIME = HH.MM.SS
RECORD-LENGTH = lrecl
FILE-STATUS = status I/O VSAM
TALLY = qtdd regs do total.

Return Codes VSAM


00 = OK
04 = EOF no GET
08 = DUP KEY no PUT ou WRITE

12 = KEY fora de sequncia no PUT


16 = RECORD NOT FOUND no READ
128 = falta DD no JCL para o arq

Vous aimerez peut-être aussi