Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Manual rápido de
referência
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 Um programa com uma atividade (JOB) :
declaração variáveis
atividade 1 PARM
[atividade 2] declaração arquivos
. declaração variáveis
.
.
EASYTRIEVE
1 – Conceitos Básicos c – Estrutura de um programa Easytrieve
JOB .....
.
.
.
.
.
• 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 “:”
EASYTRIEVE
1 – Conceitos Básicos c – Estrutura de um programa Easytrieve
• 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 é indica a posição inicial (relativa a 1) do campo dentro da área que o contém.
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 :
SALARIO * 0.5 +
10.00
AL-QTDD / 100
DESPREZADOS + 1
Em geral, as
expressões são
utilizadas para que o
resultado do cálculo
seja colocado
(atribuido) numa
variável receptora.
Declaração De Dados
– Áreas De I/O
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 :
[DEFINE] [nome-
arquivo:]nome-campo
posição-inicial tamanho
formato [decimais]
EASYTRIEVE
1 – Conceitos Básicos e – Regras gerais para os statements
outros-atributos
inteiro1
* indica que a posição inicial é a próxima disponível após a última declaração
* +inteiro2 indica que a posição inicial é n bytes após a próxima disponível após a
última declaração, sendo n indicado através de inteiro2
nome-campo +inteiro3 indica que a posição inicial é n bytes após a o campo referenciado através
do nome, sendo n indicado através de inteiro2
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
EASYTRIEVE
1 – Conceitos Básicos e – Regras gerais para os statements
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
EASYTRIEVE
1 – Conceitos Básicos e – Regras gerais para os statements
*--------------------------------------------------
* 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 **************************************************
EASYTRIEVE
1 – Conceitos Básicos e – Regras gerais para os statements
Componentes de um relatório
11,11
Comandos
ou
sendo
Exemplos :
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.
EASYTRIEVE
1 – Conceitos Básicos e – Regras gerais para os statements
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.
ou
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
EASYTRIEVE
1 – Conceitos Básicos e – Regras gerais para os statements
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
EASYTRIEVE
1 – Conceitos Básicos e – Regras gerais para os statements
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
EASYTRIEVE
1 – Conceitos Básicos e – Regras gerais para os statements
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
EASYTRIEVE
1 – Conceitos Básicos e – Regras gerais para os statements
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...).
EASYTRIEVE
1 – Conceitos Básicos e – Regras gerais para os statements
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
...
EASYTRIEVE
Quick Reference
EASYTRIEVE
1 – Conceitos Básicos e – Regras gerais para os statements