Escolar Documentos
Profissional Documentos
Cultura Documentos
Manual rápido de
referência
Conceitos..........................................................................................................................................................................3
Estrutura de um programa em EASYTRIEVE................................................................................................................3
Regras gerais para os statements .....................................................................................................................................5
Expressão.........................................................................................................................................................................6
Declaração De Dados – Áreas De I/O ............................................................................................................................6
Declaração De Dados – Áreas De Work .........................................................................................................................7
Variáveis Easytrieve; Pegar Parm Do Exec.....................................................................................................................8
Componentes de um relatório........................................................................................................................................10
Comandos......................................................................................................................................................................10
Tabelas : declaração e referência no processamento ....................................................................................................20
Dicas gerais : problemas mais comuns e outros tópicos................................................................................................21
QUICK REFERENCE...................................................................................................................................................23
2
EASYTRIEVE
3
EASYTRIEVE
Conceitos
EASYTRIEVE é uma linguagem de programação, com recursos para acesso a arquivos e bases de
dados, com comandos que trazem bastante facilidade principalmente para a geração de relatórios.
PARM
declaração arquivos
declaração variáveis
JOB .....
.
.
.
.
.
PARM ...
declaração arquivos ...
declaração variáveis ...
4
EASYTRIEVE
• o padrão é o statement estar desde a posição 1 até a 80 (pode ser mudado via parâmetro
SCANCOL de instalação)
• o padrão para comentários é o primeiro caráter não-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 próxima linha, uma linha deve ter um “+” ou um “-“ como
último caráter não-branco;
• o “+” indica que a continuação na linha seguinte começa a partir do primeiro caráter
não-branco;
• o “-” indica que a continuação na linha seguinte começa a partir da primeira
posição;
• literais devem ser colocadas entre apóstrofes
• o uso da vírgula fora de literais é opcional, usado somente para efeito de melhor visibilidade do
texto
• para qualificação de arquivos, registros e campos, se necessário, usar dois pontos “:”
• nomes de campos podem ter no máximo 40 caracteres, e podem ter caracteres alfabéticos (A a
Z), dígitos (0 a 9), e qualquer caráter especial exceto os delimitadores (espaço, apóstrofe, ponto,
vírgula, abre parênteses, fecha parênteses e dois pontos
• nomes de procedimentos e REPORTS não podem ter somente dígitos
• para fazer referência a dados em hexadecimal, usar X’nn....’, sendo nn... dígitos hexadecimais
(0 a 9, e A a F)
• operadores aritméticos ( “+” , “-“, “*” e “/” ) devem ter pelo menos um espaço antes e um
depois)
Expressão
Uma expressão é utilizada para indicar um conjunto de operações entre literais e variáveis.
As operações são : + (soma) – (subtração) * (multiplicação) e / (divisão)
A ordem de resolução segue os padrões matemáticos. Podem ser utilizados parênteses para
priorizar as operações. Exemplos :
Em geral, as expressões são utilizadas para que o resultado do cálculo seja colocado (atribuido)
numa variável receptora.
A declaração de variáveis é feita através do DEFINE. Observar que a própria keyword DEFINE é
opcional, caso a declaração seja feita após a declaração de arquivos. Sintaxe :
A alfanumérico.
N numérico decimal zonado. Máximo 16 bytes
P numérico decimal compactado (com sinal). Máximo 16 bytes
U numérico decimal compactado (sem sinal).
B numérico binário. Máximo 4 bytes.
Se especificado decimais, tem bit de sinal
Se não especificado decimais, não tem bit de sinal
Outros atributos :
HEADING = indica a(s) literal(is) a ser(em) utilizada(s) nas linhas de cabeçalho que
identificam os campos listados.
Sintaxe : HEADING (literal1 [literal2] ... [literaln])
Cada literal será colocada numa linha de cabeçalho.
Posição inicial = pode ser especificada de uma das seguintes maneiras : idem áreas de I/O
Tamanho = indica o tamanho, EM BYTES, do campo sendo definido
Formato = idem áreas de I/O
Decimais = indica a quantidade de casas decimais a considerar para o número contido
Outros atributos : HEADING , MASK (idem áreas de I/O)
VALUE = indica o conteúdo inicial do campo. Assume zero para campos numéricos
e brancos para alfanuméricos
RESET = indica que o conteúdo inicial deve ser restaurado a cada execução de um
comando JOB ou SORT
Variáveis Easytrieve; Pegar Parm Do Exec
RECORD-LENGTH = campo numérico binário de 2 bytes cujo conteúdo é colocado pelo Easy, e é
o tamanho do registro lógico processado.
RECORD-COUNT = campo numérico binário de 4 bytes cujo conteúdo é colocado pelo Easy, e é o
número sequencial do registro dentro do arquivo.
FILE-STATUS = campo com o file-status de um arquivo VSAM, cujo conteúdo é colocado pelo
Easy e indica o resultado da última operação de I/O efetuada para o arquivo.
Os file-status retornados são :
00 = OK
04 = EOF no GET
08 = DUP KEY no PUT ou WRITE
12 = KEY fora de sequência no PUT
16 = RECORD NOT FOUND no READ
128 = falta DD no JCL para o arquivo
LEVEL = campo numérico que indica qual quebra está sendo processada (detalhes e exemplos
adiante, no capítulo referente a relatórios).
TALLY = campo numérico cujo conteúdo é a quantidade de registros utilizados para a obtenção de
um total.
*--------------------------------------------------
* 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 'PARMLEN= ' PARMLEN
DISPLAY 'PARMTXT=/' PARMTXT '/'
DISPLAY 'SYSDATE= ' SYSDATE
DISPLAY HEX SYSDATE
DISPLAY 'SYSTIME= ' SYSTIME
DISPLAY HEX SYSTIME
DISPLAY '************************************'
END-PROC
*-------------
* ROTINA DE FINALIZACAO
*-------------
DEPOISDETUDO. PROC
DISPLAY '************************************'
DISPLAY '* FINAL ****************************'
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 **************************************************
Componentes de um relatório
11,11
Comandos
ou
sendo
Uma outra forma de atribuição é através dos comandos MOVE e MOVE LIKE.
sendo :
nome-campo3 = variável com um número que indica a quantidade de bytes no campo emissor
literal3 = literal numérica que indica a quantidade de bytes no campo emissor
nome-campo4 = variável com um número que indica a quantidade de bytes no campo receptor
literal4 = literal numérica 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.
Os campos cujos nomes forem iguais tanto nos campos emissores quanto nos receptores serão
movidos. Na sintaxe, temos :
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 ou
MOVE LIKE REG-ENTRA TO REG-SAI
Os campos COD-CLI, COD-AREA e NOME-CLI do arquivo ENTRA serão movidos para os campos
COD-CLI, COD-AREA e NOME-CLI do arquivo SAI.
CALL Através do comando CALL pode-se chamar para execução uma sub-rotina, mesmo desenvolvida em
outra linguagem, desde que siga as linkage conventions.
Sintaxe :
Os nomes de campo e/ou literais indicam os parâmetros que são passados PARA a sub-rotina.
O nome do campo em RETURNS indica um campo numérico que deve receber um return-code DA
sub-rotina.
DO DO WHILE condição
END-DO (primeiro testa a condição depois, se verdadeira, executa)
...
END-DO
Ou
DO UNTIL condição
(primeiro executa e depois testa a condição)
...
END-DO
DO WHILE condição
.
.
DO UNTIL condição
.
.
DO WHILE
.
.
END-DO
.
END-DO
.
.
DO WHILE condição
.
END-DO
.
.
END-DO
GO TO GO TO nome-instrução
Os pontos de uma atividade, onde há comandos a executar, podem ser identificados através de um
nome.
Para IDENTIFICAR uma instrução, basta atribuir um nome no local onde ela se encontra.
Se a referência é para executar um desvio, via GO TO, a identificação é somente o nome da instrução.
IF condição
comandos se condição satisfeita
ELSE
comandos se condição não satisfeita
END-IF
ou
IF condição
comandos se condição satisfeita
ELSE-IF condição
comandos se condição satisfeita
[ELSE-IF condição
comandos se condição satisfeita
ELSE-IF condição
comandos se condição satisfeita]
ELSE
comandos se nenhuma condição satisfeita
END-IF
Os IF’s podem ser aninhados (nested), devendo haver pares correspondentes de IF’s e
respectivos END-IF’s; a indentação não é obrigatória, apesar de facilitar a visualização
:
IF condição
(satisfeita)
IF condição
comandos se condição satisfeita
END-IF
ELSE
(não satisfeita)
IF condição
comandos se condição satisfeita
ELSE
comandos se condição não satisfeita
END-IF
END-IF
• Relacionamento de campos
• Classes de campos
• Série de campos
• Bits de campos
• Presença de arquivos
• Presença de série de arquivos
• Relacionamento de registros
RELACIONAMENTO DE CAMPOS
IF campo |EQ|=|NE|NQ|¬=|LT|LS|<|LE|LQ|<=|GT|GR|>|GE|GQ|>=|
|campo|literal|expressão|
Sendo :
EQ ou = equal (igual)
NE ou NQ ou ¬= not equal (não igual / diferente)
LT ou LS ou < less than (menor que)
LE ou LQ ou <= less or equal (menor ou igual que)
GT ou GR ou > greater than (maior que)
GE ou GQ ou >= greater or equal (maior ou igual)
CLASSES DE CAMPOS
ALPHABETIC
NUMERIC
SPACE
SPACES
ZERO
ZEROS
ZEROES
Exemplos :
SÉRIE DE CAMPOS
Testa se campo1 está ou não dentro dos limites de uma série delimitada por desde e até, cada qual
podendo ser especificado através de uma literal numérica ou alfanumérica, ou outra variável. Sintaxe:
Exemplos :
BITS DE CAMPOS
Exemplos :
PRESENÇA DE ARQUIVOS
Testa se um registro do arquivo em referência está ou não disponível para processamento. Sintaxe :
RELACIONAMENTO DE ARQUIVOS
Testa se registro(s) do arquivo tem duplicidade (ou qual duplicidade) em outro ou não. Sintaxe :
PERFORM O comando PERFORM executa uma procedure (ou rotina) : desvia para seu início (instrução
identificada por uma nome, seguido de PROC), executa as instruções até o final da rotina (identificado
com END-PROC) e volta para a instrução 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.
POINT Para efetuar o posicionamento de um arquivo VSAM num determinado ponto de seus registros.
IMPORTANTE : o registro somente fica disponível após o GET subsequente feito com sucesso (ou
uma leitura automática via JOB INPUT).
PRINT Imprime linha(s) de detalhe, conforme especificado na(s) declaração(ões) LINE do REPORT.
PRINT nome-relatorio
PUT Para efetuar a gravação sequencial de um registro lógico em arquivos SAM ou VSAM.
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 sequência
READ Para efetuar a leitura aleatória (“randômica”) de um registro lógico em um arquivo VSAM.
Status 16 = registro não localizado
REPORT Faz a declaração das características de um relatório, como por exemplo : linha(s) de cabeçalho,
linha(s) de detalhe, linha(s) de total, sequencia, etc...
simplificadamente :
Cláusulas do REPORT
EVERY literal indica que deve ser impressa somente 1 linha a cada n PRINTs.
Se especificar EVERY 10 e forem dados 1000 PRINTs para 1000 re-
gistros de um arquivo, somente os registros 10, 20, 30 ... serão impressos
FILE nome-arquivo Indica nome do arq p/ relatórios mto grandes (o VFM é insuficiente)
LIMIT literal indica o número máximo de registros a processar no relatório
LINESIZE literal Modifica o tamanho máximo, em bytes, das linhas.
NOADJUST Vai colocando os dados nas linhas de detalhe da esquerda para a direita.
Se omitido, centraliza na linha.
NODATE Faz com que NÃO seja impressa a data do dia na primeira linha de cabeçalho
NOHEADING Faz com que NÃO seja(m) impressa(s) a(s) linha(s) de cabeçalho
identificadora(s) d(s) campo(s)
NOPAGE Faz com que NÃO sejam impressas a constante identificadora de página,
e o número da página, nas linhas de cabeçalho
NOSPREAD Indica para não espalhar os dados por toda a linha (junta-los pela esquerda)
PAGESIZE literal1 literal2 Modifica o tamanho máximo, em linhas, da página.
literal1 aplica-se às linhas de LINE
literal2 aplica-se aos DISPLAYS
PRINTER nome-arquivo Indica o nome do FILE a ser utilizado por este REPORT
SKIP literal Indica o número de linhas em branco entre um PRINT e outro (entre um
LINE nn e o próximo LINE 01
SPACE literal Coloca tantos espaços em branco entre um campo e outro, quanto
especificado na literal. Assume 3.
SPREAD Indica para espalhar os dados por toda a linha de detalhe
SUMCTL ([x] [y]) Indica características das linhas de total.
x pode ser :
ALL = campos de controle devem ser impressos em todas as linhas de total
HIAR = imprimir somente os campos de controle de mesmo nível, ou de nível mais alto
NONE = não 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
espaço suficiente)
y pode ser :
DTLCOPY = imprimir variáveis de detalhe nas linhas de total, se LEVEL=1
DTLCOPYALL = idem, para todos os LEVEL
SUMMARY devem ser impressos somente os totais especificados na cláusula CONTROL
SUMSPACE literal indica o tamanho para impressão dos campos de total. O nro especificado
através da literal é somado ao tamanho (em dígitos) do campo para
determinar o tamanho do campo de total (máximo possível resultante = 18)
TALLYSIZE Indica tamanho do TALLY do relatório (existe um TALLY para cada REPORT)
TITLESKIP literal Indica o número de linhas em branco entre a última linha de cabeçalho
Geral e a primeira de cabeçalho identificador dos campos
procedures para declarar procedimentos que são invocados pelo Easy automaticamente em
eventos relacionados à impressão do relatório. As procedures podem ser :
STOP STOP
Termina a execução da atividade (JOB ou SORT).
WRITE
WRITE nome-arquivo [|UPDATE|ADD|] [FROM |nome-arq|campo| ] [STATUS]
Para efetuar a gravação de novos registros, update de registros já existentes, ou delete de um registro
lógico num arquivo VSAM
ou
WRITE nome-arquivo DELETE [STATUS]
Para efetuar o delete (lógico) de um registro num arquivo VSAM.
Status 8 = chave duplicada
Tabelas : declaração e referência 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 05MAIO 06JUNHO +
07JULHO 08AGOSTO 09SETEMBRO 10OUTUBRO 11NOVEMBRO 12DEZEMBRO ’
...
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
Dicas gerais : problemas mais comuns e outros tópicos
WNROZONADO = 12345
IF WNROZULTDIR ON X'C0'
WNROZULTDIR = WNROZULTDIR - 48
END-IF
IF WNROZULTDIR ON X'F0'
WNROZULTDIR = WNROZULTDIR + 48
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'
WNROPULTDIR = WNROPULTDIR - 3
END-IF
IF WNROPULTDIR ON X'0F'
WNROPULTDIR = WNROPULTDIR + 3
END-IF
* SABE O QUE EH 3? EH X'03', A DIFERENCA ENTRE X'0F' E X'0C'
f) Abends na execução
0C7= Data exception :
Algum campo numérico está sendo manuseado pelo EASY, e seu conteúdo não é numérico.
Normalmente é indicado o statement Easy onde o problema ocorreu. Se o statement referir-se a um
REPORT, é um campo numérico que se está tentando imprimir, e que não está com conteúdo
numérico. Mude o(s) campo(s) numérico(s) para alfa (pode-se redefini-los) e faça referência aos
nomes alfa na(s) LINE(S).
Não esqueça 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 método de acesso sequencial bastante apropriado para
manipulação de arquivos de trabalho (temporários).
Normalmente, quando se usa arquivos de trabalho, cada um deles precisa ter uma definição, tanto
no programa quanto em JCL.
Utilizando VFM, basta declarar todos os arquivos de trabalho como VIRTUAL na especificação do
FILE, e os arquivos são manipulados, dentro do possível (depende da memória disponível) em
memória, sem necessidade de especificação em JCL. Caso a memória disponível não seja
suficiente, uma única área em disco é utilizada como “extensão” (através do DD EZTVFM).
Arquivos declarados como VIRTUAL são deletados quando seu processamento como input é
terminado. Exemplo :
FILE CADCLI
...
FILE CADCLIALFA VIRTUAL
...
SORT CADCLI TO CADCLIALFA USING CLI-NOME
JOB INPUT CADCLIALFA
...
QUICK REFERENCE REPORT
Declaração de campos I/O REPORT nome-relatorio +
[SUMMARY] +
[DEFINE] [nome-arquivo:]nome-campo pos-inicial tambytes [SUMFILE] +
|A|N|P|U|B| [decimais] [HEADING (‘...’)] [MASK (‘...’)] [SUMSPACE] +
[TALLYSIZE] +
Declaração de campos work [DTLCTL |EVERY|FIRST|NONE|] +
[SUMCTL ([x] [y])] +
[DEFINE] nome-campo W tamanho |A|N|P|U|B| [decimais] [LABELS [ACROSS literal] ] +
[HEADING (‘...’)] [MASK (‘...’)] [DOWN literal SIZE literal NEWPAGE] +
[FILE nome-arquivo] +
Atividade JOB normal [PRINTER nome-arquivo] +
PARM [PAGESIZE literal literal] +
FILE arq PRINTER |DEFER| [LINESIZE literal] +
FILE arqseq-es |DEFER| [SKIP literal] +
FILE arqseq-es VBS maxlrecl [maxblk] [FULLTRK] [DEFER] [SPACE literal] +
FILE arqvs-e VS [DEFER] [TITLESKIP literal] +
FILE arqvs-u VS UPDATE [DEFER] [| SPREAD | NOSPREAD |] +
FILE arqvs-s VS CREATE |NOVERIFY| |RESET| [DEFER] [NOADJUST] +
declaração áreas I/O [| NODATE | NOKDATE |] +
declaração variáveis work [| NOPAGE | NOKPAGE |] +
*------------------------------------------- [NOHEADING] +
JOB INPUT [START proc] [FINISH proc] [LIMIT literal] +
JOB INPUT NULL [START proc] [FINISH proc] [EVERY literal]
JOB INPUT arq [START proc] [FINISH proc] SEQUENCE campo1 [D] campo2 [D] ...
JOB INPUT arq KEY cpo1 [cpo2...] CONTROL cpo1 [D] ... |FINAL| |NEWPAGE| +
comandos |RENUM| |NOPRINT|
REPORT.... SUM campo1 [campo2 ... campon]
TITLE nrolin |cpo| literal |+nro|-nro| [COL nro]
Atividade SORT HEADING campo (‘xxx’ [‘yyy’ ...])
PARM LINE nrolin |cpo|literal |+nro|-nro| [|COL|POS| nro]
FILE arq PRINTER [DEFER] *-------------------------------------------
FILE arqseq-es [DEFER] REPORT-INPUT. PROC
FILE arqseq-es VBS maxlrecl [maxblk] [FULLTRK] [DEFER] ...
FILE arqvs-e VS [DEFER] END-PROC
FILE arqvs-u VS UPDATE [DEFER] *-------------------------------------------
FILE arqvs-s VS CREATE |NOVERIFY| |RESET| [DEFER] BEFORE-LINE. PROC
declaração áreas I/O ...
declaração variáveis work END-PROC
*------------------------------------------- *-------------------------------------------
SORT arq1 TO arq2 USING campo1 [D] [BEFORE proc] + AFTER-LINE. PROC
[SIZE literal1] [WORK literal2] ...
comandos, exceto de I/O (só DISPLAY sem nomearq) END-PROC
*-------------------------------------------
Atividade JOB INPUT SQL BEFORE-BREAK. PROC
PARM ...
FILE arq PRINTER |DEFER| END-PROC
FILE arqseq-es |DEFER| *-------------------------------------------
FILE arqseq-es VBS maxlrecl [maxblk] [FULLTRK| |DEFER| AFTER-BREAK. PROC
FILE arqvs-e VS |DEFER| ...
FILE arqvs-u VS UPDATE |DEFER| END-PROC
FILE arqvs-s VS CREATE |NOVERIFY| |RESET| |DEFER| *-------------------------------------------
declaração áreas I/O ENDPAGE. PROC
declaração variáveis work ...
*------------------------------------------- END-PROC
JOB INPUT SQL [START proc1] [FINISH proc2] *-------------------------------------------
SELECT coluna1 [, coluna2..... , colunan ] + TERMINATION. PROC
FROM nometabela + ...
[WHERE condição] + END-PROC
[ORDER coluna1 [... , colunan] ] + *-------------------------------------------
INTO :campo1 [ ... , campon]
comandos
REPORT .... Return Codes VSAM
Variáveis EASY 00 = OK
04 = EOF no GET
SYSDATE = AA/MM/DD SYSTIME = HH.MM.SS 08 = DUP KEY no PUT ou WRITE
RETURN-CODE = uso JCL RECORD-LENGTH = lrecl 12 = KEY fora de sequência no PUT
RECORD-COUNT = qt regs FILE-STATUS = status I/O VSAM 16 = RECORD NOT FOUND no READ
LEVEL = qual quebra TALLY = qtdd regs do total. 128 = falta DD no JCL para o arq
PARM-REGISTER = para pegar PARM via CALL EZTPX01