Documente Academic
Documente Profesional
Documente Cultură
Introduo
SUMRIO
1 O QUE A LINGUAGEM COBOL......................................................................................7
2 ESTRUTURA DE UM PROGRAMA COBOL.......................................................................7
2.1 Estrutura bsica...............................................................................................................................................................7
2.2 Estrutura detalhada.........................................................................................................................................................8
2.3 Exemplos de programas simples ....................................................................................................................................9
3 STATEMENTS ...................................................................................................................10
4 CONJUNTO DE CARACTERES........................................................................................10
5 PALAVRAS .......................................................................................................................11
5.1) RESERVADAS ou PRE-DEFINIDAS...........................................................................................................................11
5.2) DEFINIDAS PELO PROGRAMADOR........................................................................................................................12
6 - VARIAVEIS E CONSTANTES............................................................................................13
6.1) Declarao.........................................................................................................................................................................13
Nmero de nvel ...................................................................................................................................................................13
Registro.................................................................................................................................................................................14
Nvel 01.................................................................................................................................................................................14
Cod Cliente............................................................................................................................................................................14
Nome.....................................................................................................................................................................................14
Data Nascimento...................................................................................................................................................................14
Local Nasc.............................................................................................................................................................................14
Nvel 02.................................................................................................................................................................................14
Dia.........................................................................................................................................................................................14
Mes........................................................................................................................................................................................14
Ano........................................................................................................................................................................................14
UF..........................................................................................................................................................................................14
Cidade....................................................................................................................................................................................14
Nvel 03.................................................................................................................................................................................14
Registro.................................................................................................................................................................................14
Nvel 01.................................................................................................................................................................................14
Cod Cliente............................................................................................................................................................................14
Nome.....................................................................................................................................................................................14
Data Nascimento...................................................................................................................................................................14
Local Nasc.............................................................................................................................................................................14
3
Nvel 05.................................................................................................................................................................................14
Dia.........................................................................................................................................................................................14
Mes........................................................................................................................................................................................14
Ano........................................................................................................................................................................................14
UF..........................................................................................................................................................................................14
Cidade....................................................................................................................................................................................14
Nvel 10.................................................................................................................................................................................14
Nome : ..................................................................................................................................................................................16
Redefines ..............................................................................................................................................................................17
Picture ..................................................................................................................................................................................19
Usage ....................................................................................................................................................................................22
(ocorrncias) .........................................................................................................................................................................26
Value ...................................................................................................................................................................................26
7 - IDENTIFICATION DIVISION...............................................................................................27
8 - ENVIRONMENT DIVISION.................................................................................................28
8.1) CONFIGURATION SECTION......................................................................................................................................28
8.2) INPUT-OUTPUT SECTION..........................................................................................................................................29
FILE-CONTROL..................................................................................................................................................................29
I-O-CONTROL.....................................................................................................................................................................29
9 - DATA DIVISION..................................................................................................................30
FILE SECTION.......................................................................................................................................................................30
WORKING-STORAGE SECTION......................................................................................................................................30
LINKAGE SECTION.............................................................................................................................................................30
10 - PROCEDURE DIVISION...................................................................................................31
10-1) OBSERVACOES GERAIS...........................................................................................................................................31
10-1-1) Continuao de comandos........................................................................................................................................31
10-1-2) Expresses................................................................................................................................................................31
10-1-3) Referncia explcita a sub-strings.............................................................................................................................32
10-1-4) Referncia a variveis com OCCURS......................................................................................................................32
10-1-5) Referncia a sub-strings e ndices............................................................................................................................32
10-1-6) Acesso ao PARM.....................................................................................................................................................33
10-1-7) Referncia ao tamanho de uma varivel...................................................................................................................33
10-1-8) Data e hora de execuo ..........................................................................................................................................34
10-2) Comandos executveis...................................................................................................................................................35
Clusulas de comandos Aritmticos .....................................................................................................................................35
ON SIZE ERROR.........................................................................................................................................................35
ROUNDED...................................................................................................................................................................36
GIVING.........................................................................................................................................................................36
4
11 - RELATRIOS...................................................................................................................57
Conceitos gerais :..................................................................................................................................................................57
Exemplo :..............................................................................................................................................................................59
12 SUB-ROTINAS.................................................................................................................63
13 ARQUIVOS VSAM KSDS................................................................................................69
13.1 Conceitos .........................................................................................................................................................................69
File Status :............................................................................................................................................................................69
Record Key ou Alternate Record Key :.................................................................................................................................69
Operaes possveis :............................................................................................................................................................69
Para alocar um VSAM :........................................................................................................................................................70
DD para VSAM.....................................................................................................................................................................71
5
APNDICES...........................................................................................................................172
APNDICE A - RELAO DE PALAVRAS RESERVADAS.......................................................................................172
APNDICE B Abends 0Cx................................................................................................................................................175
APNDICE C - Grace Murray Hopper - Creator of COBOL ........................................................................................177
APNDICE D First Computer BUG................................................................................................................................178
APNDICE E - Embedded commands (exemplos para SQL)......................................................................................179
APNDICE F Comparao dos tipos de variveis C/C++ e Cobol...............................................................................183
APNDICE G Indentao.................................................................................................................................................184
APNDICE G Pontos........................................................................................................................................................186
Guidelines for Procedure Design.........................................................................................................................................187
bsica do programa
*******************************************************
ENVIRONMENT DIVISION.
*------------------------------------------------CONFIGURATION SECTION.
*-------------------------------------------------Informaes sobre o equipamento
INPUT-OUTPUT SECTION.
e sobre os arquivos utilizados
*-----------------------------------FILE-CONTROL.
*-----------------------------------I-O-CONTROL.
********************************************************
DATA DIVISION.
*------------------------------------------------FILE SECTION.
*------------------------------------------------WORKING-STORAGE SECTION.
Declarao das variveis
*------------------------------------------------LINKAGE SECTION.
*------------------------------------------------COMMUNICATION SECTION.
*------------------------------------------------REPORT SECTION.
*******************************************************
PROCEDURE DIVISION.
*******************************************************
COMP
COMP-1
COMP-2
COMP-3
COMP-4
VALUE
VALUE
VALUE
VALUE
VALUE
1.
.1E01.
.1E01.
1.
1.
=0000000000000000001
= .12300000E 03
=000000000000000001
=0000000000000000001
W-COMP-2
= .12300000000000000E 03
3 Statements
72 Posies :
Posio 1 a 6 = numerao
Posio 7
= Continuao ( - )
Comentrio ( * )
Posio 8
= Margem A
Obrigatrio colocar na margem A:
- nvel 01
- FD
- nvel 77
Posio 12
= Margem B
Colocar da margem B em diante:
- tudo exceto o obrigatrio na margem A
4 Conjunto de caracteres
A ate Z
0 ate 9
espao
+
(mais; adio)
(hfen; subtrao)
*
(asterisco; multiplicao)
/
(barra; diviso)
>
(maior que)
<
(menor que)
=
(igual a)
.
(ponto)
,
(vrgula)
;
(ponto e virgula)
$
(cifro)
"
(aspas)
'
(apostrofe)
(
(abre parnteses)
)
(fecha parnteses)
10
ou
5 Palavras
5.1) RESERVADAS ou PRE-DEFINIDAS
5.1.1 CONECTORES (opcionais)
,
;
(virgula)
(ponto e virgula)
ALL
zeros
espaos
XFF
X00
caracteres de delimitao de literais alfanumricas
(aspas ou apstrofes) referenciados como contedo
alfanumrico ser usado para preencher uma varivel
ou para comparao
repetio de caracteres ou de cadeias de caracteres
adio
subtrao
multiplicao
diviso
igual
maior que
menor que
maior ou igual
menor ou igual
11
As PALAVRAS OPCIONAIS so aquelas que podem ser colocadas, mas no exercem funo a no ser
melhorar a "leitura" do programador. Para o compilador elas so dispensveis e no alteram o
comportamento do programa.
Por exemplo, no comando IF VAR1 IS GREATER THAN VAR2 as palavras IS e THAN so
opcionais.
5.2) DEFINIDAS PELO PROGRAMADOR
5.2.1) TIPOS
DATA NAMES = nomes de campos de memria (variveis)
PROCEDURE NAMES = nomes de procedimentos (instrues)
A instruo anterior a um procedure name deve terminar com um ponto.
Um procedure name deve sempre ser seguido de um ponto.
Quando for nome de uma SECTION (section name), deve ter o procedure name , a
palavra SECTION e o ponto.
5.2.2) REGRAS DE FORMAO
Caracteres vlidos : letras (A a Z)
algarismos (0 a 9)
hfen
No pode comear nem terminar com hfen
Pode ter no mximo 30 caracteres
Obs.: data names de colunas de tabelas DB2 podem ter
Underscore (_) : na realidade tais referncias so
resolvidas pelo pr-compilador e no pelo COBOL
TELEF_CLI
ENDER_CLI
5.2.3) QUALIFICAO DE DATA NAMES DEFINIDOS MAIS DE UMA VEZ
CODCLI
CODCLI
CODCLI
CODCLI
OF
OF
IN
IN
REG-CADCLI
REG-ARQMOV
REG-CADCLI
REG-ARQMOV
12
6 - VARIAVEIS E CONSTANTES
6.1) Declarao
As variveis so declaradas na DATA DIVISION.
Para declarar reas internas do programa (que fazem parte fisicamente dele) usa-se a FILE SECTION
ou a WORKING-STORAGE SECTION.
Para declarar reas externas o programa (fisicamente esto em outro programa ou sub-programa) usa-se
a LINKAGE SECTION.
As reas relacionadas diretamente com os arquivos, usadas pelos comandos de I/O (ler arquivos, gravar
arquivos, imprimir linhas) devem obrigatoriamente ser definidas na FILE SECTION, aps a declarao
com nvel FD do arquivo respectivo.
As reas no relacionadas diretamente com arquivos devem ser declaradas na WORKING-STORAGE
SECTION.
A sintaxe simplificada para a declarao de variveis a seguinte :
nmero_de_nvel nome [REDEFINES nome] [picture] [usage] [ocorrncias] [value].
A sintaxe completa :
nmero_de_nvel nome
[REDEFINES nome-da-vriavel-definida-anteriormente]
[PIC {X | 9 | A | edio } ]
[ [USAGE] [IS] { [DISPLAY] | COMP | COMP-1 | COMP-2 | COMP-3 | COMP-4 | COMP-5 | } ]
[ OCCURS n [ TIMES ] [ DEPENDING ON variavel ] ]
[ VALUE [ IS ] contedo-inicial].
Nmero de nvel
Permite a declarao de uma estrutura de variveis.
Identifica se a varivel subconjunto de outra varivel ou no e/ou se ela tem ou no outras
variveis que sejam seus subconjuntos.
importante a ordem com que as variveis so declaradas, para, em conjunto com o nmero de
nvel, identificar se elas so parte de outra varivel ou no.
13
Nvel 01
Registro
Cod Cliente
Nome
Data Nascimento
Local Nasc.
Nvel 02
Cidade
Nvel 03
Declarao :
Nvel
01
02
02
02
03
03
03
02
03
03
Varivel
Registro
Cod.Cliente
Nome Cliente
Data Nascimento
Dia
Ms
Ano
Local Nascimento
UF
Cidade
Utiliza-se tambm a numerao dos nveis com intervalo entre um nmero e outro, para que se
possa inserir alguma estrutura / nome em nveis intermedirios, aps a declarao inicial, sem a
necessidade de alterar todos os nveis :
Nvel 01
Registro
Cod Cliente
Nome
Data Nascimento
Declarao :
14
Local Nasc.
Nvel 05
Cidade
Nvel 10
Nvel
01
05
05
05
10
10
10
05
10
10
Varivel
Registro
Cod.Cliente
Nome Cliente
Data Nascimento
Dia
Ms
Ano
Local Nascimento
UF
Cidade
Registro
Cod.Cliente
Nome Cliente
Data Nascimento
10
Dia
10
Ms
10
Ano
05 Local Nascimento
10
UF
10
Cidade
05
05
05
UF
88
88
88
88
PIC X(02).
VALUE SP.
VALUE BA.
VALUE MG.
VALUE PR.
PAULISTA
BAIANO
MINEIRO
PARANAENSE
.
.
.
IF PAULISTA MOVE 15 TO ALIQUOTA
.
.
.
Equivale a
IF UF = SP MOVE 15 TO ALIQUOTA
.
.
.
15
PIC X(5).
PIC X(30).
PIC X(05).
PIC X(20).
PIC X(08).
PARTE2 THRU PARTE4.
O efeito seria o mesmo caso tivessem sido feitas as seguintes declaraes (ver a clusula
REDEFINES):
01
05
05
01
05
05
05
TRECO-TODO.
TRECO1.
10
PARTE1
PIC X(5).
10
PARTE2
PIC X(30).
TRECO2.
10
PARTE3
PIC X(05).
10
PARTE4
PIC X(20).
10
PARTE5
PIC X(08).
TRECO-TODOX REDEFINES TRECO-TODO.
FILLER
PIC X(5).
COMBINADINHO
PIC X(55).
FILLER
PIC X(08).
Nome :
Nome atribudo varivel (data name).
Regras do Cobol
1. Pode ter de 1 at 30 caracteres
2. Os caracteres vlidos so :
Alfabticos (A at Z)
Algarismos (0 at 9)
Hfen
3. Os hfens devem ser usados no
meio do nome (no pode comear
nem terminar com hfen)
4. No pode haver 2 hfens
subsequentes
Regras da vida...
1.
Atribuir nomes que lembrem a funo da varivel;
por exemplo, se uma varivel for usada para acumular os
valores de salrios de funcionrios, nomes como
TOTSALAR, ACSALAR, VALTOTSAL so bons; nomes
como I, TOT, VAR, VARX , embora vlidos, dificultam
MUITO a leitura e entendimento do programa
2.
Usar nomes mais longos somente quando for
absolutamente necessrio; eles so difceis de memorizar,
demoram mais para serem digitados e dificultam a leitura;
principalmente quando 2 ou mais nomes longos em boa
parte igual (entre eles) e diferenciam-se somente num
sufixo.
3.
Portanto, uma abreviao bem feita mais til que
um nome mais longo.
16
Redefines
um re-declarao de uma mesma varivel fsica com outra estrutura
Existem casos em que, feita a declarao de uma estrutura, conveniente refazer sua
declarao para que os dados nela contidos possam ser referenciados de outra forma.
Normalmente poder-se-ia contornar esta questo efetuando-se uma cpia do contedo da
varivel para uma outra que tivesse o mesmo tamanho, mas cuja estrutura fosse diferente.
No entanto, pode ser conveniente utilizar fisicamente a mesma rea. Neste caso, possvel
em Cobol efetuar a sua redefinio.
Suponha um texto cujo contedo fosse :
LINHAS=50
Isso implicaria na necessidade de utilizar uma varivel que fosse receber esse texto, que
tivesse 9 bytes :
01 TEXTO.
05 IDLIN
PIC X(6).
05 SEPARLIN PIC X(1).
05 QTLIN
PIC 9(2).
TEXTO
IDLIN
SEPARLIN
QTLIN
Se precisssemos de uma outra varivel para receber outro texto como o a seguir :
PAGS=1200
Isso implicaria na necessidade de utilizar uma varivel que fosse receber esse texto, que
tambm tivesse 9 bytes :
01 TEXTO.
05 IDPAG
PIC X(4).
05 SEPARPAG PIC X(1).
05 QTPAG
PIC 9(4).
TEXTO
IDPAG
SEPARPAG
17
QTPAG
Se fosse necessrio receber ambos os contedos na mesma varivel (mesma rea fsica),
poderamos faz-lo da seguinte forma, usando o REDEFINES :
01 TEXTO.
05 IDLIN
PIC X(6).
05 SEPARLIN PIC X(1).
05 QTLIN
PIC 9(2).
01 TEXTO2 REDEFINES TEXTO.
05 IDPAG
PIC X(4).
05 SEPARPAG PIC X(1).
05 QTPAG
PIC 9(4).
Ou seja, a rea, fisicamente seria uma s, mas teria nomes diferentes associados a pedaos
seus diferentes :
TEXTO
TEXTO2
IDLIN
IDPAG
QTLIN
SEPARLIN
SEPARPAG
QTPAG
Outro exemplo :
Registro Header
DE
1
2
10
AT
1
9
80
Tipo
Numerico
Numrico
Alfanumrico
Contedo
Tipo Registro
Data gravao (aaaammdd)
Vazio
Obs.
Fixo 1
Contedo
Tipo Registro
Conta corrente
Tipo movimento (Dou C)
Valor movimento
vazio
Obs.
Fixo 2
Contedo
Tipo Registro
Qtdd registros detalhe
Vazio
Obs.
Fixo 9
Registro Detalhe
DE
1
2
9
10
22
AT
1
8
9
21
80
Tipo
Numerico
Numrico
Alfanumrico
Numrico
Alfanumrico
2 decimais
Registro Trailler
DE
1
2
7
AT
1
6
80
Tipo
Numerico
Numrico
Alfanumrico
18
01 REG-ENTRADA.
05 REG-COD
05 REG-RESTO
05
PIC X(1).
PIC X(79).
10
10
05
10
10
10
10
05
10
10
Picture
Indica tipo de dados na varivel. Se omitido, assume que o formato alfanumrico (PIC X) e a varivel
deve ter obrigatoriamente subdiviso; o tamanho a somatria de todas as subdivises declaradas em
seguida.Pode ser :
PIC X = alfanumrico
PIC A = alfabtico
PIC 9 = numrico
Sintaxe : (obs.: sempre que estiver especificado (n) indicando quantidade de bytes ou algarismos,
pode-se tambm especificar o tipo repetidamente, tantas vezes quantos forem os bytes ou algarismos).
PIC X = se a varivel tiver um nico byte
PIC X(n) = se a varivel tiver n bytes
Exemplo : PIC XXXXX
ou
PIC X(5)
PIC A = se a varivel tiver um nico byte
PIC A(n) = se a varivel tiver n bytes
Exemplo : PIC AAAAA
ou
PIC A(5)
PIC 9 = se o nmero (em decimal) contido na varivel tiver um nico
algarismo inteiro
PIC 9(i) = se o nmero (em decimal) contido na varivel tiver
algarismos inteiros
ou
ou
PIC 9(5)
PIC 9(5)V99
= 5 inteiros
ou PIC 99999V9(2) = 5 inteiros e 2 decimais
19
PICTURE DE EDIO
S pode ser usado como receptor de atribuies cuja origem seja um campo numrico
No pode ser usado em clculos
Caracteres que podem ser usados na edio, que so substitudos por algarismos ou por um
caracter de preenchimento (enquanto no houver algarismos significativos) :
Letra Z
Z
Algarismo 9
9
Asterisco
*
Caracteres que podem ser usados na edio, que podem ser inseridos junto com os algarismos, para
permitir melhor visualizao do contedo numrico de um campo :
Sinal de menos
Sinal de mais
+
Separador da parte
inteira da parte
decimal
ou
Se o nmero for negativo, o lugar onde ele est na mscara fica com -
Se o nmero for negativo, o lugar onde ele est na mscara fica com espao
Se o nmero for negativo, o lugar onde ele est na mscara fica com -
Se o nmero for negativo, o lugar onde ele est na mscara fica com +
Se tiver DECIMAL-POINT IS COMMA : deve ser especificada a vrgula
, .
Cifro
$
(Crdito)
CR
(Dbito)
DB
Barra
/
Inserido na primeira posio esquerda do campo editado (em geral usado para valores)
Usado ao final ( direita) do campo : se especificado CR , aparecer
Picture de edio
Campo destino
00120056678
00120056678
Z.ZZZ.ZZZ.ZZ9,99
ZZZ.ZZZ.ZZZ.ZZ9
bb1.200.566,78
120.056.678
20
Outros exemplos :
Campo de origem
PIC
9(7)
Contedo 1234567
PIC
9(5)
Contedo 12345
PIC
9(7)
Contedo 0001234
PIC
9(7)
Contedo 0000123
PIC
9(7)
Contedo 0000001
PIC
9(7)
Contedo 0000000
PIC
9(7)V99
Contedo 123456789
PIC
9(7)V99
Contedo 123456789
PIC
9(7)V99
Contedo 000000001
PIC
9(7)V99
Contedo 123456789
PIC
9(7)V99
Contedo 123456789
PIC
9(5)V9(4)
Contedo 123456789
PIC
9(5)V9(2)
Contedo (+) 1234567
PIC
9(5)V9(2)
Contedo (-) 1234567
Portanto, em geral :
Valores
: PIC .........ZZZ.ZZZ.ZZ9,99
Quantidades : PIC .........ZZZ.ZZ9
21
Usage
Indica o formato dos dados na varivel. Sintaxe :
[USAGE] DISPLAY = dados numricos em zonado. Cada algarismo ocupa um byte.
Mximo de 18 caracteres/algarismos.
[USAGE] COMP
[USAGE] COMP-1
[USAGE] COMP-2
= dados numricos no formato binrio ponto flutuante longo. No
colocar PIC (ele estabelecido automaticamente pelo compilador). Valor expresso em notao
cientfica (mantissa e expoente).
[USAGE] COMP-4
em decimal.
dados numricos no formato binrio ponto fixo (valor expresso em
decimal) ; os valores limite (menor e maior) so os que podem ser representados no campo no
formato binrio ponto fixo.
[USAGE] COMP-5 =
22
Quantidade de
bytes, se a
varivel for
zonada
(DISPLAY)
1
Quantidade de
bytes, se a
varivel for
Compactada
(COMP-3)
1
10
10
11
11
12
12
13
13
14
14
15
15
16
16
17
17
18
18
10
23
Quantidade
de bytes
2 bytes
(5-9)
S9(5) a
S9(9)
4 bytes
(10-18)
S9(10) a
S9(18)
8 bytes
Sem
Sinal
(1-4)
9(1) a
9(4)
2 bytes
(5-9)
9(5) a
9(9)
4 bytes
(10-18)
9(10) a
9(18)
8 bytes
-9 a 9
-99 a 99
-999 a 999
-9.999 a 9.999
-99.999 a 99.999
-999.999 a 999.999
-9.999.999 a 9.999.999
-99.999.999 a 99.999.999
-999.999.999 a 999.999.999
-9.999.999.999 a
9.999.999.999
... at ...
-999999999999999999 a
999999999999999999
-0,09 a 0,09
-0,99 a 0,99
-9,99 a 9,99
-99,99 a 99,99
-999,99 a 999,99
-9.999,99 a 9.999,99
-99.999,99 a 99.999,99
-999.999,99 a 999.999,99
-9.999.999,99 a 9.999.999,99
-99.999.999,99 a
99.999.999,99
... at ...
-9999999999999999,99 a
9999999999999999,99
0 a 9
0 a 99
0 a 999
0 a 9.999
0 a 99.999
0 a 999.999
0 a 9.999.999
0 a 99.999.999
0 a 999.999.999
0 a 9.999.999.999
... at ...
0 a 999999999999999999
0 a 0,09
0 a 0,99
0 a 9,99
0 a 99,99
0,00 a 999,99
0,00 a 9.999,99
0,00 a 99.999,99
0,00 a 999.999,99
0,00 a 9.999.999,99
0,00 a 99.999.999,99
... at ...
0,00 a 9999999999999999,99
24
Quantidade de
bytes
2 bytes
-32.768
a 32.767
-327,68
a 327,67
4 bytes
-2.147.483.648
a 2.147.483.647
-21.474.836,48
a 21.474.836,47
8 bytes
-9.223.372.036.854.775.808
a 9.223.372.036.854.775.807
-92.233.720.368.547.758,08
a 92.233.720.368.547.758,07
2 bytes
0
a 65.535
0
a 655,35
4 bytes
0
a 4.294.967.295
0
a 42.949.672,95
8 bytes
0
a a 184.467.440.737.095.516,15
18.446.744.073.709.551.615
IMPORTANTE :
Para campos numricos (PIC 9) DISPLAY ou COMP-3 ou COMP-4 pode-se
opcionalmente colocar a indicao de sinal :
PIC 9(03)
ou PIC S9(03).
Se no for especificado sinal, o campo ser SEMPRE tratado como se tivesse nmero positivo.
Exemplo : se a varivel WCALC for definida com PIC 9(03) e contiver zero, se subtrairmos 1,
ela passar a ter o nmero 1 positivo ( sempre forado sinal positivo aps uma operao
aritmtica)
Se for especificado sinal, o campo ser SEMPRE tratado conforme os nmeros relativos.
Exemplo : se a varivel WCALC for definida com PIC S9(03) e contiver zero, se subtrairmos
1, ela passar a ter o nmero 1 negativo
Mximo de 18 algarismos num campo numrico, incluindo parte inteira e decimal, para usage
DISPLAY, COMP-3
25
(ocorrncias)
Indica a quantidade de vezes que a varivel ocorre (usado para declarao de vetores). Occurs
Sintaxe :
OCCURS n TIMES [DEPENDING ON varivel]
Exemplo :
10
Value
Indica o contedo inicial que deve ser atribudo varivel (em tempo de compilao). specificado
atravs de literal ou constante figurativa.
Sintaxe :
VALUE literal
Exemplo :
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
100
ZERO
.123E12
RELATORIO
ALL *
ALL *-
26
7 - IDENTIFICATION DIVISION
PROGRAM-ID.
AUTHOR.
DATE-WRITTEN.
DATE-COMPILED.
SECURITY.
REMARKS.
nome do programa.
nome do programador.
data de codificao.
data de compilao.
comentrios.
comentrios.
27
8 - ENVIRONMENT DIVISION
8.1) CONFIGURATION SECTION.
SOURCE-COMPUTER.
OBJECT-COMPUTER.
SPECIAL-NAMES.
...
...
Cnn IS nome_usuario
DECIMAL-POINT IS COMMA.
Cnn (pode ser desde C01 at C12) indica para qual canal de impressora deseja-se atribuir um nome
de usurio, para referenciar nos comandos de impresso (WRITE).
Se for colocado C01 IS NOVAPAGINA, por exemplo, no comando WRITE para pular de pgina
pode-se especificar
WRITE area_fd [FROM area_wss] BEFORE ADVANCING PAGE
ou
WRITE area_fd [FROM area_wss] BEFORE ADVANCING NOVAPAGINA
Se for colocado C02 IS ITENSNOTAFISCAL, por exemplo, no comando WRITE para imprimir a
linha (com o primeiro tem de uma nota fiscal) deve-se especificar
WRITE area_fd [FROM area_wss] BEFORE ADVANCING ITENSNOTAFISCAL
Importante :
Normalmente C01 a posio onde ser impressa a primeira linha de uma pgina
Se for utilizado canais C02 at C12 , deve ser preparada a definio das caractersticas
do formulrio com a indicao dos canais e as respectivas posies (linhas) em que se
encontram; normalmente um procedimento feito pelo pessoal de produo
Pontos separando visualmente grupos de algarismos e vrgula separando parte inteira da parte
decimal
Se no especificado, vale a notao americana (Vrgulas separando visualmente grupos de
algarismos e ponto separando parte inteira da parte decimal)
28
I-O-CONTROL.
Clusulas para diversas finalidades, normalmente no usadas :
RERUN, SAME, MULTIPLE, APPLY
29
9 - DATA DIVISION
FILE SECTION.
Para declarao de caractersticas de arquivos e das variveis com os registros dos arquivos.
Para cada arquivo deve ser colocada uma declarao de nvel FD, seguida da declarao da rea de
I/O respectiva.
FD
01
FD
01
ENTRA.
AE-FD
SAIDA.
AS-FD
PIC X(80).
PIC X(133).
IMPORTANTE :
Cada arquivo tem UMA NICA rea de I/O.
No entanto, pode-se declarar diversas reas com nvel 01; caso haja mais de uma rea com nvel 01
para um arquivo, internamente a declarao funciona como uma sequncia de REDEFINES.
Devido a isso, o uso do REDEFINES na FILE SECTION no permitido.
WORKING-STORAGE SECTION.
Para declarao das variveis de trabalho, no vinculadas diretamente aos registros dos arquivos.
LINKAGE SECTION.
Para indicar as variveis usadas no programa, mas declaradas externamente.
No exemplo a seguir, a rea W-DATA-VIA-PARM na verdade est declarada (est fisicamente) em
rea do sistema operacional, que quem chama o programa e lhe passa o parametro (dados).
LINKAGE SECTION.
01 W-DATA-VIA-PARM.
03 W-DATA-PARM-TAM
PIC 9(02) COMP.
03 W-DATA-1
PIC X(10).
03 W-DATA-2
PIC X(08).
*===============================================================*
PROCEDURE DIVISION USING W-DATA-VIA-PARM.
DISPLAY W-DATA-PARM-TAM.
DISPLAY W-DATA-1 '
' W-DATA-2.
30
10 - PROCEDURE DIVISION
10-1) OBSERVACOES GERAIS
10-1-1) Continuao de comandos
Uma instruo pode ser continuada por quantas linhas forem necessrias :
.........1.........2.........3.........4.........5.........6.........7..
DISPLAY 'CONTEUDO DA VARIAVEL W-COMP = '
W-COMP
' CONTEUDO DA VARIAVEL W-DATA = '
W-DATA
Uma literal que no caiba numa linha, para que seja continuada na prxima linha,
precisa ter na prxima linha a indicao da continuao (hfen na coluna 7) e, em
qualquer coluna a partir da 12, um apstrofe indicando o incio da continuao.
Rguas para
simples referncia
.........1.........2.........3.........4.........5.........6.........7..
10-1-2) Expresses
Uma expresso indica uma srie de operaes aritmticas que devem ser efetuadas. A hierarquia para
sua resoluo a normal (multiplicao e diviso, soma e subtrao), sendo os componentes de dentro
dos parnteses sendo resolvidos primeiro. Pode-se colocar quantos nveis de parnteses forem
necessrios, observando-se que sempre eles devem estar em pares.
Exemplo :
COMPUTE RESULT = ((AA * 2) + BB) / (((CC + 1.7) * (DD 3.14)) / 1952)
31
TO WS-HORA
TO WS-MIN
TO WS-SEG
Tamanho (qtdd bytes)
TO WS-WORK
32
ndice (s)
31/12/03
Note que o tamanho da varivel colocado em W-DATA-PARM-TAM inclui somente o tamanho dos
dados em si, sem incluir os 2 bytes de W-DATA-PARM-TAM.
10-1-7) Referncia ao tamanho de uma varivel
A funo LENGTH OF retorna o tamanho de uma varivel. As instrues
01
W-DATA-VIA-PARM.
03 W-DATA-PARM-TAM
03 W-DATA-1
03 W-DATA-2
exibem o seguinte :
VOU EXIBIR
000000020
TAMANHO DE W-DATA-VIA-PARM
33
34
Exemplos genricos :
ADD ... ON SIZE ERROR comandos para overflow END-ADD comandos para overflow e no-overflow
ADD ... ON SIZE ERROR comandos para overflow comandos para overflow e no-overflow
MULTIPLY ... ON SIZE ERROR comandos para overflow END-MULTIPLY comandos para overflow e nooverflow
MULTIPLY .... ON SIZE ERROR comandos para overflow comandos para overflow e no-overflow
35
ROUNDED
36
Tabela de comandos
1.
Comando
Descrio
ACCEPT
Exemplo(s)
ACCEPT varivel
ACCEPT RESPOSTA
L um registro lgico em SYSIN e colocao na varivel
denominada
RESPOSTA
ACCEPT NUMERO(INDEXADOR)
L um registro lgico em SYSIN e colocao na varivel denominada NUMERO
indexada pela varivel INDEXADOR
(portanto coloca num elemento de um
vetor)
2.
ADD
ADD V1 TO V2
Efetua V2 = V2 + V1
ADD 1 TO V2
Efetua V2 = V2 + 1
ADD V1 V2 V3 TO V4
Efetua V4 = V1 + V2 + V3
ADD V1 V2 V3 V4 TO V4
Efetua V4 = V1 + V2 + V3 + V4
ADD 1 TO V1 V2 V3 V4
Efetua
V1 = V1 + 1
V2 = V2 + 1
V3 = V3 + 1
V4 = V4 + 1
ADD V1 TO V2 ROUNDED
Efetua V2 arredondado = V2 + V1
3.
CALL
37
DATAVEM
Obs.2:
Chama a rotina denominada DATACONV;
Passagem de parametro por referencia (BY
as reas de
REFERENCE) significa que o dado vai ser
comunicao so
efetivamente passado e pode ser alterado
DATAVAI e DATAVEM
Passagem de parametro por conteudo (BY
CONTENT) significa que somente seus valores serao
passados e portanto os seus conteudos efetivos nao
podem ser alterados
Se nao for especificado nem BY REFERENCE nedm
BY CONTENT assume BY REFERENCE
Obs.3:
parametro-n indica que o parametro pode ser
especificado de uma das 7 maneiras a seguir :
BY REFERENCE variavel_ou_literal
BY REFERENCE ADDRESS OF variavel_ou_literal
BY REFERENCE arquivo
BY CONTENT
LENGTH OF variavel
BY CONTENT
ADDRESS OF variavel
BY CONTENT
literal
Variavel_ou_literal
4.
CLOSE
CALL nome-rotina
[USING parametro-1
[parametro-2 ... parametro-n] ]
[ [NOT] ON EXCEPTION imperativo]
[END-CALL]
Efetua o fechamento de arquivos.
CLOSE nome-arquivo1
[ nome-arq-2 ... nome-arq-n ]
38
CLOSE
CLOSE
CLOSE
CLOSE
CLOSE
CLOSE
CLOSE
ARQENTRA
ARQSAI
ARQENTRA
ARQENTSAI
ARQENT1, ARQENT2, ARQENT3
ARQSAI1, ARQSAI2, ARQSAI3
ARQES1, ARQES2, ARQES3
COMPUTE
6.
CONTINUE
CAMPO1 = 1 + 1
CAMPO1 EQUAL 1 + 1
CAMPOXX EQUAL CAMPOYY
CAMPOZZ
ALFA = ALFA ALFA
BETA = BETA * BETA
GAMA = DIVIDENDO /
DIVISOR
COMPUTE RESULT = (AA + BB) / CC
COMPUTE RESULT = ((AA + BB) /
CC) / DD
CONTINUE
Exemplo 1:
MOVE SPACES TO TEXTO.
IF TEXTO EQUAL SPACES
CONTINUE
ELSE
DISPLAY "NAO PASSA AQUI".
Exemplo 2:
IF CAMPOA GREATER THAN CAMPOB
CONTINUE
ELSE
COMPUTE CPOC = CPOA CPOB.
TESTA-SIGLA-REGIAO-SUL.
IF SIGLA = "SP" CONTINUE
ELSE
IF SIGLA = "PR"
CONTINUE
ELSE
IF SIGLA = "SC"
CONTINUE
ELSE
IF SIGLA = "RS"
CONTINUE
ELSE
PERFORM ERRO1.
SIGLA-OK.
7.
DELETE
END-DELETE
8.
DISPLAY
Exibe contedo de campo(s) num dispositivo de sada.
Normalmnte o dispositivo cujo DDNAME SYSOUT
DISPLAY [variavel | literal] ...
[variavel | literal]
WS-REGLID
9.
DIVIDE
Efetua uma diviso, disponibilizando o cociente e, se
indicado, o resto
Sintaxe 1 :
DIVIDE divisor INTO dividendo/cociente
[ REMAINDER variavel-resto ]
[ GIVING variavel-cociente ]
[ ROUNDED ]
[ [NOT] ON SIZE ERROR comando(s) ]
[END-DIVIDE]
Sintaxe 2 :
DIVIDE dividendo BY divisor
[ REMAINDER variavel-resto]
[ GIVING variavel-cociente ]
[ ROUNDED ]
[ [NOT] ON SIZE ERROR comando(s) ]
[END-DIVIDE] ]
10
.
DIVIDE QUANTIA BY 5
GIVING CADA-UM-RECEBE
REMAINDER PARA-O-SANTO
EVALUATE
Faz a comparao de uma varivel contra os valores
indicados, efetuando os procedimentos correspondentes :
EVALUATE varivel
WHEN literal-1
bloco_se_varivel=literal-1
[WHEN literal-2
bloco_se_varivel=literal-2]
[WHEN literal-n
bloco_se_varivel=literal-n]
[WHEN OTHER
bloco_se_varivel_diferente_
de_todas_as_literais]
END-EVALUATE
11
.
EXIT
EXIT
EVALUATE SIGLA-UF
WHEN 'SP' DISPLAY 'PAULISTA'
WHEN 'PR' DISPLAY 'PARANAENSE'
WHEN 'SC' DISPLAY 'CATARINENSE'
WHEN 'RS' DISPLAY
'SULRIOGRANDENSE'
WHEN OTHER DISPLAY
'OUTROS ESTADOS'
END-EVALUATE.
Ver PERFORM
12
.
GO TO
13
.
GOBACK
14
.
IF
GO TO CANCELAR
Sintaxe 2 :
GO TO nome-da-instrucao-1 .... nomeda-instrucao-n DEPENDING ON varivel
GOBACK
IF V1 LESS THAN V2
DISPLAY "V1 MENOR QUE V2"
DISPLAY "VEM PRA CA DE QUALQUER
JEITO"
IF V1 LESS THAN V2
DISPLAY "V1 MENOR QUE V2"
END-IF
DISPLAY "VEM PRA CA DE QUALQUER
JEITO"
IF V1 LESS THAN V2
DISPLAY "V1 MENOR QUE V2"
ELSE
DISPLAY "V1 > OU = A V2"
DISPLAY "VEM PRA CA DE QUALQUER
JEITO"
IF V1 LESS THAN V2
DISPLAY "V1 MENOR QUE V2"
ELSE
DISPLAY "V1 > OU = A V2"
Sintaxe 4 :
IF condio
Bloco-se-verdadeiro
ELSE
41
Bloco-se-falso
END-IF
Bloco-se-verdadeiro-ou-falso
Sintaxe 5 :
IF condio
CONTINUE
ELSE
Bloco-se-falso
Bloco-se-verdadeiro-ou-falso
Sintaxe 6 :
IF V1 LESS THAN V2
CONTINUE
ELSE
Bloco-se-falso
END-IF
Bloco-se-verdadeiro-ou-falso
15
.
INITIALIZE
END-IF
DISPLAY "VEM PRA CA DE QUALQUER
JEITO"
IF V1 LESS THAN V2
CONTINUE
ELSE
DISPLAY "V1 > OU = A V2"
DISPLAY "VEM PRA CA DE QUALQUER
JEITO"
IF V1 LESS THAN V2
CONTINUE
ELSE
DISPLAY "V1 > OU = A V2"
END-IF
DISPLAY "VEM PRA CA DE QUALQUER
JEITO"
Sintaxe 7 (aninhamento):
IF condicao-1
...para condicao-1-verdadeira...
IF condicao-1
Bloco-se-verdadeiro-1
ELSE
Bloco-se-falso-1
END-IF
ELSE
Bloco-se-condicao-1-falsa
Bloco-qualquer-condicao-verd-ou-falsa
IF V1 LESS THAN V2
DISPLAY "V1 MENOR QUE V2"
IF V3 LESS THAN V4
DISPLAY "V3 < V4"
ELSE
DISPLAY "V3 >= A V4"
END-IF
ELSE
DISPLAY "V1 >= A V2"
DISPLAY "VEM PRA CA DE QUALQUER
JEITO"
Exemplo 1 :
INITIALIZE TABELA
INITIALIZE varivel
[REPLACING [NUMERIC | ALPHABETIC] DATA
BY literal/varivel]
42
Exemplo 2 :
INITIALIZE TABELA REPLACING
NUMERIC DATA BY ZERO
Exemplo 3 :
INITIALIZE TABELA REPLACING
ALPHABETIC DATA BY SPACES
Exemplo 4 :
01 AREA-MISTA.
05 AM1 PIC 9(05).
05 AM2 PIC 9(05) COMP-3.
05 AM3 PIC X(05).
05 AM4.
10 AM5 OCCURS 5 PIC 9(05).
10 AM6 OCCURS 5 PIC 9(05) COMP-3.
10 AM7 OCCURS 5 PIC X(05).
TABELA-ACUMULADORES.
ELEMENTO OCCURS 5000.
10 SIGLAPROD PIC X(005).
10 VALOR
PIC 9(011)V99.
05
INSPECT
MOVE
44
variveis
MOVE SPACES TO LINDET1 LINDET2
LINDET3
Outros exemplos :
MOVE EMISSOR TO RECEPTOR
MOVE "XXXXX" TO RECEPTOR
MOVE 0 TO CONTADOR LINHAS
FOLHAS TOTAL-GASTO
MOVE "NAO" TO QUEBRA-BCO
QUEBRA-AGE
QUEBRA-CONTA
MOVE SPACES TO LINDET1 LINDET2
LINDET3
MOVE FUNCTION CURRENT-DATE
(01:04) TO WS-ANO
MOVE FUNCTION CURRENT-DATE
(05:02) TO WS-MES
MOVE FUNCTION CURRENT-DATE
(07:02) TO WS-DIA
MOVE FUNCTION CURRENT-DATE
(09:02) TO WS-HOR
MOVE FUNCTION CURRENT-DATE
(11:02) TO WS-MIN
MOVE FUNCTION CURRENT-DATE
(13:02) TO WS-SEG
18
.
MULTIPLY
19
.
NEXT
MULTIPLY 2 BY VALOR
MULTIPLY VALOR BY 2 GIVING
DOBRO
MULTIPLY 2 BY VALOR GIVING
DOBRO
CONTINUACAO.
DISPLAY PASSA AQUI TBEM.
20
.
OPEN
Efetua a abertura de arquivo(s)
OPEN [INPUT | OUTPUT | I/O]
Nome-arquivo1
[ nome-arquivo2 ... nome-arquivon ]
21
.
PERFORM
OPEN
OPEN
OPEN
OPEN
OPEN
OPEN
OPEN
OPEN
INPUT ARQENTRA
OUTPUT ARQSAI
ARQENTRA
I-O ARQENTSAI
INPUT ARQENT1, ARQENT2
OUTPUT ARQSAI1, ARQSAI2
I-O ARQES1, ARQES2, ARQES3
INPUT ARQENT1
OUTPUT ARQSAI1
I-O ARQES1
OPEN INPUT ARQENT1 ARQENT2
OUTPUT ARQSAI1 ARQSAI2
I-O ARQES1
PERFORM ROTINA1
TIMES
Sintaxe 5:
PERFORM procname-x THRU procname-y
Sintaxe 7:
PERFORM procname-x VARYING
n BY m UNTIL condico
campo FROM
READ
Efetua a leitura de um registro lgico, colocando-o em
uma (ou duas) varivel (eis).
Caso seja detectado fim de arquivo, o processamento
desviado para a(s) instruo(es) imperativas indicadas na
clusula AT END.
Se no for especificada a rea da Working-Storage
Section, o registro ficar na rea declarada em nvel
01 no FD do arquivo
Se for especificada a rea da Working-Storage
Section, o registro ficar tanto na rea do FD do
arquivo quanto na rea da Working-Storage Section.
Para leitura sequrencial :
READ nome-arquivo [INTO nome-areaworking] [AT END comando-imperativo]
[END-READ]
READ ARQUIVO-ENTRADA-SEQUENCIAL
AT END GO TO TERMINOU.
NO-TERMINOU.
...
READ ARQ-ENTRA-SEQ
AT END MOVE S TO EOFARQ.
IF
EOFARQ = S
PERFORM ROTFIM THRU SAIRF
ELSE
PERFORM ROTPRO THRU SAIRP.
READ ARQUIVO-ENTRADA-DIRETO.
IF FILE-STATUS-ARQUIVO = ...
23
.
REWRITE
Efetua a regravao (atualizao in-place) de um
registro lgico em um arquivo.
Para arquivos sequenciais :
48
REWRITE AREA-GRAV
REWRITE AREA-GRAV FROM
REGISTRO-FUNCIONARIO
... antes o registro deve ter sido lido ... CHAVE OK ATUALIZADO
SEARCH
49
SET
26
.
START
Posiciona o arquivo no primeiro registro da faixa
desejada. O posicionamento NO L nenhum
registro, apenas deixa um ponteiro indicando que o
prximo READ deve ler na posio do arquivo marcada.
START nome-arquivo
KEY
GREATER
>
EQUAL
=
NOT LESS
NOT <
chave-area-fd
[NOT] INVALID KEY imperativo
[END-START]
27
.
STOP RUN
Encerra a execuo de um programa (devolve o controle
ao sistema operacional).
STOP RUN
50
STOP RUN
28
.
STRING
51
Exemplo 1:
01 WS-MSG PIC X(3).
MOVE SPACES TO WS-MSG
STRING A B C INTO WS-MSG
WS-MSG fica com ABC
Exemplo 2:
01 WS-NOME PIC X(10).
01 WS-MSG PIC X(05).
MOVE SPACES TO WS-MSG
STRING NOME= WS-NOME ! INTO
WS-MSG
Se WS-NOME tiver SCHIESARI. WSMSG fica com NOME=SCHIESARI.!
Exemplo 3:
01 WS-MSG PIC X(6).
MOVE SPACES TO WS-MSG
STRING A BC DEF INTO
WS-MSG
WS-MSG fica com ABCDEF
Exemplo 4:
01 WS-MSG PIC X(6).
MOVE SPACES TO WS-MSG
STRING A B C D E F G H I
DELIMITED BY SPACE INTO WS-MSG
WS-MSG fica com ADG
Exemplo 5:
01 DT-DATA PIC X(10).
01 CONT PIC 9(02).
01 DIA
PIC X(2).
01 MS
PIC X(2).
01 ANO
PIC X(4).
MOVE SPACES TO DT-DATA
MOVE 1 TO CONT
STRING DIA '/' MES '/' ANO
DELIMITED BY SIZE
INTO DT-DATA POINTER CONT
SUBTRACT 1 FROM CONT
DISPLAY 'BYTES MOVIDOS=' CONT
DISPLAY 'DATA=' DT-DATA
Exemplo 6:
01 DT-DATA PIC X(10).
01 CONT PIC 9(02).
01 DIA
PIC X(2).
01 MS
PIC X(2).
01 ANO
PIC X(4).
MOVE SPACES TO DT-DATA
MOVE 1 TO CONT
29
.
SUBTRACT
Efetua subtrao.
Sintaxe 1 :
SUBTRACT subtraendo FROM resto
[ROUNDED] [ [NOT] ON SIZE ERROR
comando(s) ]
[END-SUBTRACT]
Sintaxe 2 :
SUBTRACT subtraendo FROM minuendo
[GIVING variavel-resultado] [ROUNDED]
[ [NOT] ON SIZE ERROR comando(s)]
[END-SUBTRACT]
30
.
UNSTRING
UNSTRING DT-DATA
DELIMITED BY SPACE OR '/' OR '.'
INTO DIA DELIMITER IN S1
COUNT IN CONT1
MES DELIMITER IN S2
COUNT IN CONT2
ANO COUNT IN CONT3
WITH POINTER CONT-PONT
TALLYING IN CONT-TALL
Alfanumrico no editado (ou tem de grupo) ou
ON OVERFLOW MOVE 'SIM' TO ERRO.
Numrico decimal zonado (cujo PIC no tenha nenhum
caractere P).
UNSTRING DT-DATA
DELIMITER IN delim-dest : delimitador est
DELIMITED BY '/'
neste campo de destino.
INTO DIA, MES, ANO.
COUNT IN qtos-bytes : varivel numrica que
UNSTRING DT-DATA
receber a quantidade de caracteres movidos para
DELIMITED BY '/'
destino1
INTO DIA COUNT IN CONT1
WITH POINTER posicao : varivel numrica
MES COUNT IN CONT2
(inteira) que tem a posio inicial a partir da qual sero
ANO COUNT IN CONT3
movidos os dados do campo origem e que, aps a
WITH POINTER CONT-PONT
execuo do comando UNSTRING, ter o nmero
TALLYING IN CONT-TALL
(posio inicial) original acrescido da quantidade de
ON OVERFLOW MOVE 'SIM' TO ERRO.
caracteres movidos dos campos de origem para o de
destino. Se omitido, assumido que o movimento iniciase a partir da posio 1.
Se em qualquer ponto o conteudo da variavel indicada por
POINTER for menor que 1 ou maior que o tamanho da
origem, ocorre a condio de erro e ser executado o(s)
comando(s) especificados em OVERFLOW.
ON OVERFLOW comando-imperativo : se
houver algum erro ocorre OVERFLOW e o controle
passa para o(s) comando(s) imperativo(s) especificado(s).
TALLYING IN qtd-destinos : varivel
numrica inteira que recebe a quantidade de campos
destino utilizados.
31
.
WRITE
Efetua a gravao de um registro lgico em um arquivo.
Se no for especificada a rea da Working-Storage
Section, o registro ser obtido da rea declarada em
nvel 01 na (Data Division) FILE SECTION / FD do
arquivo
Se for especificada a rea da Working-Storage
Section, o registro ser obtido da rea da WorkingStorage Section , copiado para a rea da (Data
Division) FILE SECTION / FD do arquivo , e
gravado.
Para gravao sequencial :
WRITE area-do-fd [FROM area-daworking-storage]
WRITE AREA-DE-GRAVACAO
53
54
Campo
Destino
PIC X
Sentido do
movimento
Esquerda para
Direita
PIC 9(n)
PIC 9(m)
(ambos so
nmeros
inteiros)
Direita para
Esquerda
PIC 9(n)V9(d)
PIC 9(m)
Parte inteira :
Direita para
Esquerda
PIC 9(n)V9(d)
PIC 9(m)V9(f)
Parte decimal :
No movida
pois o campo
destino
nmero inteiro
Parte inteira :
Direita para
Esquerda
Parte decimal :
Esquerda para
Direita
Preenchimento e / ou
Truncamento
Se tamanho campo origem > tamanho campo destino :
preenche os bytes sobrando direita do destino com
espaos
Se tamanho campo origem menor tamanho campo
destino : trunca os bytes direita que estiverem
faltando no destino
Se tamanho campo origem > tamanho campo destino :
preenche os algarismos sobrando esquerda do destino
com zeros
Se tamanho campo origem menor tamanho campo
destino : trunca os algarismos esquerda que estiverem
faltando no destino
Parte inteira :
Se tamanho campo origem > tamanho campo destino :
preenche os algarismos sobrando esquerda do destino
com zeros
Se tamanho campo origem menor tamanho campo
destino : trunca os algarismos esquerda que estiverem
faltando no destino
Parte decimal : no movida, portanto no ocorre nem
preenchimento nem truncamento
Parte inteira :
Se tamanho campo origem > tamanho campo destino :
preenche os algarismos sobrando esquerda do destino
com zeros
Se tamanho campo origem menor tamanho campo
destino : trunca os algarismos esquerda que estiverem
faltando no destino
Parte decimal :
Se tamanho campo origem > tamanho campo destino :
preenche os algarismos sobrando direita do destino
com zeros
Se tamanho campo origem menor tamanho campo
destino : trunca os bytes direita que estiverem
faltando no destino
55
Campo emissor
(constante
figurativa)
MOVE
MOVE
MOVE
MOVE
MOVE
MOVE
MOVE
MOVE
MOVE
MOVE
MOVE
MOVE
MOVE
ZERO
ZEROS
ZEROES
ZERO
ZEROS
ZEROES
SPACE
SPACES
HIGH-VALUE
HIGH-VALUES
LOW-VALUE
LOW-VALUES
QUOTE
ZERO TO TOTSAL
ZEROS TO TOTSAL
ZEROES TO TOTSAL
ZERO TO TOTSAL
ZEROS TO TOTSAL
ZEROES TO TOTSAL
SPACE TO SIGLA
SPACES TO SIGLA
HIGH-VALUE TO WWW
HIGH-VALUES TO WWW
LOW-VALUE TO WWW
LOW-VALUES TO WWW
QUOTE TO YYY
QUOTES
Campo receptor :
formato
Contedo do campo
receptor
aps o MOVE
(expresso em hexa)
PIC 9(7) COMP-3 00.00.00.0C
PIC 9(7) COMP-3 00.00.00.0C
PIC 9(7) COMP-3 00.00.00.0C
PIC 9(5)
F0.F0.F0.F0.F0
PIC 9(5)
F0.F0.F0.F0.F0
PIC 9(5)
F0.F0.F0.F0.F0
PIC X(02)
40.40
PIC X(02)
40.40
PIC X(03)
FF.FF.FF
PIC X(03)
FF.FF.FF
PIC X(03)
00.00.00
PIC X(03)
00.00.00
PIC X(05)
7D.7D.7D.7D.7D
7F.7F.7F.7F.7F
PIC X(05)
7D.7D.7D.7D.7D
7F.7F.7F.7F.7F
PIC X(05)
5C.5C.5C.5C.5C
PIC X(05)
5C.C1.5C.C1.5C
56
ou
ou
11 - RELATRIOS
Conceitos gerais :
Primeiro byte esquerda da linha (da varivel com os dados a serem impressos na linha)
reservado para conter o caracter de controle de espacejamento , um cdigo que vai indicar
impressora o espacejamento a ser efetuado antes ou depois da impresso.
Existem basicamente 2 tipos (de padro) de caracter de controle que podem ser usados :
Codigo
Ao
X09
X0B
X11
X13
X19
X1B
X89
X8B
X91
X93
X99
X9B
XA1
XA3
XA9
XAB
XB1
XB3
XB9
XBB
XC1
XC3
XC9
XCB
XD1
XD3
XD9
XDB
XE1
XE3
57
O primeiro byte esquerda reservado para que nele seja colocado o cdigo que indica
o espacejamento que deve ser dado associado impresso da linha
Os demais 132 bytes tem o contedo a ser impresso ; o tamanho de 132 deriva do fato de
que as impressoras originalmente utilizadas por mainframes tinham a capacidade fsica fixa de
impresso de 132 caracteres por linha
No ROSCOE :
Attachar o JOB com : A J nnn CC
No TSO :
Com o JOB j attachado , dar F10.
No COBOL :
1 WRITE = 1 linha
IMPORTANTE : num mesmo programa, no misturar BEFORE e AFTER para um mesmo arquivo
Para saltar de folha, imprimir uma linha e ficar posicionado na linha que imprimiu =
WRITE area_fd [FROM area_wss] AFTER ADVANCING PAGE
Para avanar 1 linha, imprimir e ficar posicionado na linha que imprimiu =
WRITE area_fd [FROM area_wss] AFTER ADVANCING 1 [LINE]
Para avanar 2 linhas, imprimir e ficar posicionado na linha que imprimiu =
WRITE area_fd [FROM area_wss] AFTER ADVANCING 2 [LINES]
Para avanar 3 linhas, imprimir e ficar posicionado na linha que imprimiu =
WRITE area_fd [FROM area_wss] AFTER ADVANCING 3 [LINES]
Para imprimir uma linha, saltar de folha e ficar posicionado na primeira linha da folha =
WRITE area_fd [FROM area_wss] BEFORE ADVANCING PAGE
Para imprimir, avanar 1 linha, e ficar posicionado nela =
WRITE area_fd [FROM area_wss] BEFORE ADVANCING 1 [LINE]
Para imprimir, avanar 2 linhas, e ficar posicionado na segunda aps a impressa (uma em branco a cada impressa) =
WRITE area_fd [FROM area_wss] BEFORE ADVANCING 2 [LINES]
58
Para imprimir, avanar 3 linhas, e ficar posicionado na terceira aps a impressa (duas em branco a cada impressa) =
WRITE area_fd [FROM area_wss] BEFORE ADVANCING 3 [LINES]
Exemplo :
O programa Cobol colocado a partir da prxima pgina l os dados abaixo :
1
2
3
4
5
6
7
8
12345678901234567890123456789012345678901234567890123456789012345678901234567890
000001NOME
000002NOME
000003NOME
000004NOME
000005NOME
000006NOME
000007NOME
000008NOME
000009NOME
000010NOME
000011NOME
000012NOME
000013NOME
000014NOME
000015NOME
000016NOME
PECA000001LITROS0100000001COMENTARIO
PECA000002LITROS0200000002COMENTARIO
PECA000003LITROS0300000003COMENTARIO
PECA000004LITROS0400000004COMENTARIO
PECA000005LITROS0500000005COMENTARIO
PECA000006LITROS0600000006COMENTARIO
PECA000007LITROS0700000007COMENTARIO
PECA000008LITROS0800000008COMENTARIO
PECA000009LITROS0900000009COMENTARIO
PECA000010LITROS1000000010COMENTARIO
PECA000011LITROS1100000011COMENTARIO
PECA000012LITROS1200000012COMENTARIO
PECA000013LITROS1300000013COMENTARIO
PECA000014LITROS1400000014COMENTARIO
PECA000015LITROS1500000015COMENTARIO
PECA000016LITROS1600000016COMENTARIO
PECA
PECA
PECA
PECA
PECA
PECA
PECA
PECA
PECA
PECA
PECA
PECA
PECA
PECA
PECA
PECA
000001
000002
000003
000004
000005
000006
000007
000008
000009
000010
000011
000012
000013
000014
000015
000016
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
E imprime o seguinte relatrio (a numerao fora do quadro para simples referncia das posies):
1
2
3
4
5
6
7
8
12345678901234567890123456789012345678901234567890123456789012345678901234567890
PAG.
1
***
TITULO PRINCIPAL
SUB TITULO
***
000001
000002
000003
000004
000005
000006
000007
000008
000009
000010
000011
NOME
NOME
NOME
NOME
NOME
NOME
NOME
NOME
NOME
NOME
NOME
UNIDADE
PECA000001
PECA000002
PECA000003
PECA000004
PECA000005
PECA000006
PECA000007
PECA000008
PECA000009
PECA000010
PECA000011
LITROS01
LITROS02
LITROS03
LITROS04
LITROS05
LITROS06
LITROS07
LITROS08
LITROS09
LITROS10
LITROS11
PRECO
OBSERVACAO
0,01
0,02
0,03
0,04
0,05
0,06
0,07
0,08
0,09
0,10
0,11
COMENTARIO
COMENTARIO
COMENTARIO
COMENTARIO
COMENTARIO
COMENTARIO
COMENTARIO
COMENTARIO
COMENTARIO
COMENTARIO
COMENTARIO
59
PECA
PECA
PECA
PECA
PECA
PECA
PECA
PECA
PECA
PECA
PECA
000001
000002
000003
000004
000005
000006
000007
000008
000009
000010
000011
*
*
*
*
*
*
*
*
*
*
*
1
2
3
4
5
6
7
8
12345678901234567890123456789012345678901234567890123456789012345678901234567890
PAG.
2
***
TITULO PRINCIPAL
SUB TITULO
***
000012
000013
000014
000015
000016
NOME
NOME
NOME
NOME
NOME
UNIDADE
PECA000012
PECA000013
PECA000014
PECA000015
PECA000016
LITROS12
LITROS13
LITROS14
LITROS15
LITROS16
PRECO
OBSERVACAO
0,12
0,13
0,14
0,15
0,16
COMENTARIO
COMENTARIO
COMENTARIO
COMENTARIO
COMENTARIO
PECA
PECA
PECA
PECA
PECA
000012
000013
000014
000015
000016
*
*
*
*
*
IDENTIFICATION DIVISION.
PROGRAM-ID. TESTE.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES. DECIMAL-POINT IS COMMA.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT ENTRA
ASSIGN TO ENTRA.
SELECT SAIDA
ASSIGN TO SAIDA.
*----------------------------------------------------------------DATA DIVISION.
FILE SECTION.
*------------*
FD
ENTRA.
01
AE-FD
PIC X(80).
FD
SAIDA.
01
AS-FD
PIC X(133).
*----------------------------------------------------------------WORKING-STORAGE SECTION.
*
01 FIMENTRA
PIC X(01) VALUE 'N'.
01 CONTLINS
PIC 9(05) VALUE 99.
01 CONTFOLS
PIC 9(05) VALUE ZERO.
01 AE.
05 AE-COD
PIC X(06).
05 AE-NOME
PIC X(15).
05 AE-UNID
PIC X(08).
05 AE-PRECO
PIC 9(06)V99.
05 AE-OBS
PIC X(36).
05 FILLER
PIC X(07).
01 AS.
60
05
05
*
01
01
01
01
01
AS-CTL
AS-DADOS
LCAB1.
05 FILLER
05 FILLER
05 LCAB1FOL
05 FILLER
05 FILLER
05 FILLER
LCAB2.
05 FILLER
05 FILLER
05 FILLER
05 FILLER
LCAB3.
05 FILLER
05 LCAB3-DATA
05 FILLER
05 LCAB3-HORA
LCAB4.
05 FILLER
05 FILLER
05 FILLER
05 FILLER
05 FILLER
05 FILLER
05 FILLER
05 FILLER
05 FILLER
05 FILLER
LDET.
05 FILLER
05 LDET-COD
05 FILLER
05 LDET-NOME
05 FILLER
05 LDET-UNID
05 FILLER
05 LDET-PRECO
05 FILLER
05 LDET-OBS
PIC X(01).
PIC X(80).
PIC
PIC
PIC
PIC
PIC
PIC
X(01).
X(04) VALUE
ZZ.ZZ9.
X(22) VALUE
X(16) VALUE
X(32) VALUE
PIC
PIC
PIC
PIC
X(01).
X(28) VALUE SPACES.
X(24) VALUE '***
SUB TITULO
X(28) VALUE SPACES.
PIC
PIC
PIC
PIC
X(01).
X(16) VALUE 'DATA: DD/MM/AAAA'.
X(50) VALUE ALL '-'.
X(14) VALUE 'HORA: HH.MM.SS'.
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
X(01).
X(06) VALUE
X(01) VALUE
X(15) VALUE
X(01) VALUE
X(08) VALUE
X(01) VALUE
X(10) VALUE
X(01) VALUE
X(37) VALUE
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
X(01).
X(06).
X(01) VALUE
X(15).
X(01) VALUE
X(08).
X(01) VALUE
ZZZ.ZZ9,99.
X(01) VALUE
X(36).
'PAG.'.
SPACES.
'TITULO PRINCIPAL'.
SPACES.
***'.
'CODIGO'.
SPACES.
'NOME'.
SPACES.
'UNIDADE'.
SPACES.
'PRECO'.
SPACES.
'OBSERVACAO'.
SPACES.
SPACES.
SPACES.
SPACES.
*
*---------------------------------------------------------------PROCEDURE DIVISION.
*---------------------------------------------------------------PROGRAMA SECTION.
*
MOVE FUNCTION CURRENT-DATE (07:2) TO LCAB3-DATA (07:2)
MOVE FUNCTION CURRENT-DATE (05:2) TO LCAB3-DATA (10:2)
MOVE FUNCTION CURRENT-DATE (01:4) TO LCAB3-DATA (13:4)
*
MOVE FUNCTION CURRENT-DATE (09:2) TO LCAB3-HORA (07:2)
61
OPEN
OPEN
VOLTALER.
READ
IF
IF
INPUT ENTRA.
OUTPUT SAIDA.
ENTRA INTO AE
AT END MOVE 'S' TO FIMENTRA.
FIMENTRA = 'S'
GO TO FECHAR.
CONTLINS GREATER 10
PERFORM CABEC.
AE-COD
TO LDET-COD.
AE-NOME
TO LDET-NOME.
AE-UNID
TO LDET-UNID.
AE-PRECO TO LDET-PRECO.
AE-OBS
TO LDET-OBS.
LDET
TO AS-FD.
AS-FD AFTER ADVANCING 1.
TO CONTLINS.
VOLTALER.
MOVE
MOVE
MOVE
MOVE
MOVE
MOVE
WRITE
ADD 1
GO TO
FECHAR.
CLOSE ENTRA SAIDA.
TERMINAR.
STOP RUN.
*---------------------------------------------------------------CABEC.
*---------------------------------------------------------------ADD
1
TO CONTFOLS.
MOVE
CONTFOLS TO LCAB1FOL.
MOVE
ZERO
TO CONTLINS.
MOVE
LCAB1
TO AS-FD.
WRITE AS-FD
AFTER ADVANCING PAGE.
MOVE
LCAB2
TO AS-FD.
WRITE AS-FD
AFTER ADVANCING 1.
MOVE
LCAB3
TO AS-FD.
WRITE AS-FD
AFTER ADVANCING 2.
MOVE
LCAB4
TO AS-FD.
WRITE AS-FD
AFTER ADVANCING 2.
MOVE
SPACES
TO AS-FD.
WRITE AS-FD
AFTER ADVANCING 3.
SAI-CABEC. EXIT.
62
12 SUB-ROTINAS
Programa principal (chamador)
Working-Storage Section.
Declarao da varivel parmetro
[e da varivel que ir conter o nome da rotina]
Procedure Division.
CALL nome_rotina [USING varivel_parmetro]
Ou
CALL variavel_com_nome_rotina [USING varivel_parmetro]
Sub-rotina (chamado)
Working-Storage Section.
Declarao das variveis de trabalho da rotina
Linkage Section.
Declarao da varivel parmetro.
Fisicamente elas esto no programa chamador.
Aqui somente uma mscara para que possa ser feita
referncia na Procedure Division.
Procedure Division USING varivel_parmetro.
63
Exemplos :
Chamador :
01 AREA-DE-INTERFACE.
05 ENVIANDO.
10 NUMERO-NUMERICO PIC 9(9)V99.
05 RECEBENDO.
10 COD-RETORNO
PIC 9(1).
10 NUMERO-EXTENSO PIC X(300).
CALL ROT-EXTENDER USING AREA-DE-INTERFACE.
IF COD-RETORNO = ZERO
PERFORM DISPLAY NUMERO-EXTENSO
ELSE
DISPLAY ERRO NO NUMERO FORNECIDO. CODIGO = COD-RETORNO
END-IF
Chamado :
LINKAGE SECTION.
01 AREA-DE-INTERFACE.
05 VOUPEGAR.
10 NUMERO-NUMERICO PIC 9(9)V99.
05 VOUDEVOLVER.
10 COD-RETORNO
PIC 9(1).
10 NUMERO-EXTENSO PIC X(300).
PROCEDURE DIVISION USING AREA-DE-INTERFACE.
PERFORM VALIDA-NUM
IF ERRO = SIM
MOVE 4 TO COD-RETORNO
ELSE
PERFORM TRANSFORMA-EM-TEXTO
MOVE ZERO TO COD-RETORNO
END-IF
RETURN
64
Chamador :
01 COMMAREA.
05 CHAMADOR.
10 CODCLI PIC 9(5).
05 CHAMADO.
10 COD-RETORNO
PIC 9(1).
10 NOMECLI
PIC X(30).
CALL PESQNOME USING COMMAREA.
IF COD-RETORNO = ZERO
PERFORM DISPLAY NOMECLI
ELSE
DISPLAY CLIENTE NO CADASTRADO (RC= COD-RETORNO )
END-IF
Chamado :
LINKAGE SECTION.
01 COMMAREA.
05 CHAMADOR.
10 CODCLI PIC 9(5).
05 CHAMADO.
10 COD-RETORNO
PIC 9(1).
10 NOMECLI
PIC X(30).
PROCEDURE DIVISION USING AREA-DE-INTERFACE.
PERFORM ACESSA-CADCLI
IF ACHOU = SIM
MOVE 0 TO COD-RETORNO
ELSE
MOVE 4 TO COD-RETORNO
END-IF
RETURN
65
10 DIVIDENDO
PIC 9(15).
10 DIVISOR
PIC 9(5).
05 PARTE2.
10 NOSSO-RC
PIC 9(1).
10 COCIENTE
PIC 9(15).
10 RESTO
PIC 9(5).
PROCEDURE DIVISION USING AREA-COMUNICACAO.
DISPLAY MSG
IF DIVIDENDO NOT NUMERIC OR
DIVISOR NOT NUMERIC
MOVE 4 TO NOSSO-RC
ELSE
DIVIDE DIVIDENDO BY DIVISOR
GIVING COCIENTE REMAINDER RESTO
MOVE
0 TO NOSSO-RC
END-IF
GOBACK.
//*--------------------------------------------------------//* COMPILACAO + LINKEDICAO
//* DO PROGRAMA PRINCIPAL, CHAMADOR DE
//*
SUBROT1, SUBROT2 E SUBROT3
//*--------------------------------------------------------//STEP4
EXEC CALLCCLG,MEMBER=CHAMADOR
//COMPMAIN.SYSIN DD *
ID DIVISION.
PROGRAM-ID.
CHAMADOR.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
INPUT-OUTPUT SECTION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NOMEDELA
PIC X(8) VALUE SPACES.
01 AREA-COMUNICACAO.
05 PARTE1.
10 DIVIDENDO
PIC 9(15).
10 DIVISOR
PIC 9(5).
05 PARTE2.
10 NOSSORC
PIC 9(1).
10 COCIENTE
PIC 9(15).
10 RESTO
PIC 9(5).
PROCEDURE DIVISION.
DISPLAY '-----------------------------------------'.
CALL 'SUBROT1'
MOVE 'SUBROT2' TO NOMEDELA
CALL NOMEDELA
MOVE 'SUBROT3' TO NOMEDELA
MOVE 1234
TO DIVIDENDO
MOVE 5
TO DIVISOR
CALL NOMEDELA USING AREA-COMUNICACAO
DISPLAY 'DIVIDENDO= ' DIVIDENDO
DISPLAY 'DIVISOR = ' DIVISOR
DISPLAY 'COCIENTE = ' COCIENTE
DISPLAY 'RESTO
= ' RESTO
67
DISPLAY '-----------------------------------------'.
STOP RUN.
//GO.SYSPRINT DD SYSOUT=*
//GO.SYSOUT
DD SYSOUT=*
JOBNAME
EPC##ARS
EPC##ARS
EPC##ARS
EPC##ARS
EPC##ARS
EPC##ARS
EPC##ARS
EPC##ARS
EPC##ARS
STEPNAME
STEP1
STEP1
STEP2
STEP2
STEP3
STEP3
STEP4
STEP4
STEP4
PROCSTEP
COMPSUB
LKEDSUB
COMPSUB
LKEDSUB
COMPSUB
LKEDSUB
COMPMAIN
LKED
GO
PROGRAM
IGYCRCTL
IEWL
IGYCRCTL
IEWL
IGYCRCTL
IEWL
IGYCRCTL
IEWL
PGM=*.DD
RC
00
00
00
00
00
00
00
00
00
68
Deletar registros
pela chave primria
pela chave alternada 1
pela chave alternada 2
... assim por diante ...
Via JCL
//STEPALOC EXEC PGM=IEFBR14
//VKSDS1 DD DSN=DSVAABVS.LSG.A889.ALBERTO,DISP=(,CATLG,DELETE),
//
SPACE=(CYL,(10,10)),LRECL=100,KEYOFF=10,
//
KEYLEN=12,RECORG=KS
Via IDCAMS
//STEP1
EXEC PGM=IDCAMS
//SYSOUT
DD SYSOUT=*
//SYSUDUMP
DD SYSOUT=*
//SYSPRINT
DD SYSOUT=*
//SYSABOUT
DD SYSOUT=*
//SYSIN DD *
DEFINE
CLUSTER
( NAME('DSVAABVS.LSG.A889.ALBERTO')
INDEXED
FREESPACE(20 10)
KEYS(12 10)
RECORDSIZE(100 100)
NOREPLICATE
NOREUSE
SHAREOPTIONS(2 3)
) /* CLUSTER */
DATA
( NAME('DSVAABVS.EPC.ALBERTO.A001.DATA')
CYL(10 10)
CISZ(4096)
SPEED
) /* DATA */
INDEX
( NAME('DSVAABVS.EPC.ALBERTO.A001.INDEX')
TRACKS(5 5)
CISZ(2048)
) /* INDEX */
70
DD para VSAM
Considerando um arquivo declarado com SELECT arquivo ... :
Se tiver RECORD KEY aberto o arquivo //ddname DD DSN=nome_arquivo
Portanto :
Mesmo que no seja(m) usada(s) chave(s) alternada(s), se forem especificadas no
SELECT ALTERNATE RECORD KEYs, sero abertos os arquivos ndice respectivos
(referenciados via PATH); se no for colocado statement DD para tais arquivos (PATHs), a
mensagem DD STATEMENT MISSING aparecer para eles quando o arquivo for aberto;
se houver tentativa de uso, o programa abenda; se no for usado, no haver problema.
Dependendo do uso que ser feito , uma chave alternada pode ter que ser especificada
como chave primria (ver leitura sequencial por chave alternada adiante)
Para que o sistema saiba efetuar o relacionamento correto entre um PATH e a chave
alternada qual ele est associado, FUNDAMENTAL que a especificao das chaves
alternadas seja feita na sequncia adequada (a chave alternada 1 deve ser a primeira
ALTERNATE RECORD KEY; a chave alternada 2 deve ser a segund ALTERNATE
RECORD KEY; e assim por diante
Por isso, mesmo que um programa no use todas as chaves alternadas, a partir da
segunda, obrigatorio que se declare todas as anteriorers : se for usar s a segunda, deve-se
especificar a primeira e a segunda (nessa ordem); se for usada s a terceira, deve-se
especificar a primeira, a segunda e a terceira (nessa ordem).
71
Programa
Funo
P01CRIA
P02INCL
P03UP
P04UA1
P05UA2
P06LSP
P07LSA1
Registros manuseados
Identificao
Campos
Resto
*CR1
*CR2
*CR3
*CR4
#IR1
#IR2
#IR3
#IR4
@UR1
@UR2
@UR3
@UR4
$UR1
$UR2
$UR3
$UR4
#UR1
#UR2
#UR3
#UR4
P08LSA2
P09LFP
P10LFA1
P11LFA2
P12LDP
P13LDA1
P14LDA2
P15DP
P16DA1
P17DA2
+ (90101 a 90091)
Ler registros sequencialmente pela Lidos registros com
chave alternada 2
[chave primria = 00010 a 00021 + 00501 a 00511
+ 00001 a 00009
chave alternada 1 = 00091 a 00080 + 00200 a 00190
+ 00100 a 00092 ]
chave alternada 2 = 00000 a 00011 + 90091 a 90101
Ler faixa de registros pela chave
Lidos registros com
primria
chave primria = 00004 a 00010
[chave alternada 1 = 00097 a 00090
chave alternada 2 = 99994 a 99999 + 00000 e 00001]
Ler faixa de registros pela chave
Lidos registros com
alternada 1
[chave primria = 00006 a 00001]
chave alternada 1 = 00095 a 00100
[chave alternada 2 = 99996 a 99991]
Ler faixa de registros pela chave
Lidos registros com
alternada 2
[chave primria = 00505 a 00511 + 00001 a 00005
chave alternada 1 = 00196 a 00190 + 00100 a 00096]
chave alternada 2 = 90095 a 90101 + 99991 a 99994
Ler registros diretamente pela
Lidos registros com
chave primria
chave primria = 00005 (acha), 00015 (acha) , 00025 (no
acha) e 00035 (no acha)
[chave alternada 1 = 00096 e 00086
chave alternada 2 = 99995 e 00005]
Ler registros diretamente pela
Lidos registros com
chave alternada 1
[chave primria = 00021 e 00511 ]
chave alternada 1 = 00078 (no acha), 00080 (acha) , 00189
(no acha) e 00190 (acha)
[chave alternada 2 = 00011 e 90101]
Ler registros diretamente pela
Lidos registros com
chave alternada 2
[chave primria = 00021 , 00501 e 00001
chave alternada 1 = 00080 , 00200 e 00100]
chave alternada 2 = 00011 (acha) , 90091 (acha) , 90102
(no acha) e 99991 (acha)
Deletar registros (lidos
Deletados registros com
diretamente) pela chave primria
chave primria = 00005 e 00015
[chave alternada 1 = 00096 e 00086
chave alternada 2 = 99995 e 00005]
Deletar registros (lidos
Deletados registros com
diretamente) pela chave alternada [chave primria = 00006 e 00016]
1
chave alternada 1 = 00095 e 00085
[chave alternada 2 = 99996 e 00006]
Deletar registros (lidos
Deletados registros com
diretamente) pela chave alternada [chave primria = 00007 e 00017
2
chave alternada 1 = 00094 e 00084]
chave alternada 2 = 99997 e 00007
73
74
Conceitos :
Para efetuar a carga inicial dos registros de dados (mass insertion) num arquivo VSAM KSDS,
muitas vezes o procedimento consiste na execuo do IDCAMS (funo REPRO), copiando um
arquivo SAM (j formatado com a estrutura desejada no VSAM) para VSAM;
pode-se tambm, obviamente, desenvolver programa que faa a carga.
os registros a gravar (voa IDCAMS ou aplicativo) devem estar em ordem crescente tendo como
critrio de classificao o campo de chave primria; para isso, se necessrio, gerar com o SORT o
arquivo que ser usado como base da carga.
SELECT nome_arquivo
ORGANIZATION IS INDEXED
ACCESS IS SEQUENTIAL
FILE STATUS IS variavel_wss
RECORD KEY IS chave_primria
DDs
Procedimentos :
Abrir o arquivo com OPEN OUTPUT nome_arquivo e testar file status :
File Status = 00 : OK
File Status 00 : erro
Importante : O arquivo VSAM KSDS de sada s pode ser aberto como OUTPUT se estiver vazio
na hora da abertura !!!
Preparar a rea de gravao (declarada na FILE SECTION) com os dados que formam o registro e
Gravar o registro com o comando WRITE nome_rea_fd e testar o file status :
File Status = 00 : WRITE OK. Registro incluido
File Status = 21 : erro OUTOFSEQ : Registro no incluido pois a chave primria est fora de
sequncia
File Status = 22 : erro DUPKEY : Registro no incluido pois j existe registro com chave
primria igual chave primria do registro que se tentou incluir
File Status outros = : erro no WRITE
Fechar o arquivo com CLOSE nome_arquivo e testar file status :
File Status = 00 : OK
File Status 00 : erro
//ddname
DD
DISP=SHR,DSN=dsname_cluster
75
76
77
END-EVALUATE
*
DISPLAY '--------------------------------------------------'
DISPLAY 'GRAVADOS ARQUIVO
= ' GG-ARQUIVO
DISPLAY '--------------------------------------------------'
*
STOP RUN.
*---------------------------------------------------------------* INCLUIR REGS EM ARQUIVO VAZIO
*---------------------------------------------------------------GRAVINCL1 SECTION.
ADD
1
TO WW-ARQUIVO.
MOVE
WW-ARQUIVO
TO WW-CHAVEP
MOVE
WW-CHAVEP
TO A-FD-ARQUIVO-CHAVEP
MOVE
'*CR1'
TO A-FD-ARQUIVO-RESTO1
COMPUTE WW-CHAVES1
= 100100 - WW-ARQUIVO + 1
COMPUTE WW-CHAVES2
= 99990 + WW-ARQUIVO
MOVE
WW-CHAVES1
TO A-FD-ARQUIVO-CHAVES1
MOVE
WW-CHAVES2
TO A-FD-ARQUIVO-CHAVES2
MOVE
ALL '*CR2
'
TO A-FD-ARQUIVO-RESTO2
MOVE
ALL '*CR3
'
TO A-FD-ARQUIVO-RESTO3
MOVE
ALL '*CR4
'
TO A-FD-ARQUIVO-RESTO4
*
WRITE
A-FD-ARQUIVO
EVALUATE FS-ARQ
WHEN '00'
DISPLAY '
FS=' FS-ARQ ' WRITE OK '
' CHAVEP :' A-FD-ARQUIVO-CHAVEP
' CHAVES1:' A-FD-ARQUIVO-CHAVES1
' CHAVES2:' A-FD-ARQUIVO-CHAVES2
' RESTO1 :' A-FD-ARQUIVO-RESTO1
ADD 1 TO GG-ARQUIVO
IF WW-CHAVEP > WW-ULTGRAVADO
MOVE WW-CHAVEP TO WW-ULTGRAVADO
END-IF
WHEN '21'
DISPLAY '
FS=' FS-ARQ ' WRITE OUTSEQ ' WW-CHAVEP
WHEN '22'
DISPLAY '
FS=' FS-ARQ ' WRITE DUPREC ' WW-CHAVEP
WHEN OTHER
DISPLAY '
FS=' FS-ARQ ' WRITE ERRO'
END-EVALUATE
*
CONTINUE.
SAI-GRAVINCL1. EXIT.
*---------------------------------------------------------------//GO.SYSPRINT DD SYSOUT=*
//GO.ARQUIVO
DD DSN=DSVAABVS.LSG.A002.ALBERTO,DISP=SHR
//*------------------------------------------------------------------//* DEFINE AIXS E PATHS
//*------------------------------------------------------------------//STEP3
EXEC PGM=IDCAMS
//SYSOUT
DD SYSOUT=*
//SYSUDUMP
DD SYSOUT=*
//SYSPRINT
DD SYSOUT=*
//SYSABOUT
DD SYSOUT=*
//SYSIN DD *
DEFINE AIX (NAME(DSVAABVS.LSG.A002.ALBERTO.AIX1)
RELATE(DSVAABVS.LSG.A002.ALBERTO)
-
78
RECSZ(080 080)
KEYS(05 15)
FSPC(10 10)
CYL(2 1)
SPEED
UPGRADE
UNIQUEKEY
SHR(2 3))
DEFINE PATH(NAME(DSVAABVS.LSG.A002.ALBERTO.PATH.AIX1)
PATHENTRY(DSVAABVS.LSG.A002.ALBERTO.AIX1))
DEFINE AIX (NAME(DSVAABVS.LSG.A002.ALBERTO.AIX2)
RELATE(DSVAABVS.LSG.A002.ALBERTO)
RECSZ(080 080)
KEYS(05 30)
FSPC(10 10)
CYL(2 1)
SPEED
UPGRADE
UNIQUEKEY
SHR(2 3))
DEFINE PATH(NAME(DSVAABVS.LSG.A002.ALBERTO.PATH.AIX2)
PATHENTRY(DSVAABVS.LSG.A002.ALBERTO.AIX2))
79
PPRESTO4
46 35 A
FILE ENTRASS1 VS
S1CHAVE-PRI
1 5 A
S1RESTO1
6 10 A
S1CHAVE-SEC1 16 5 A
S1RESTO2
21 10 A
S1CHAVE-SEC2 31 5 A
S1RESTO3
36 10 A
S1RESTO4
46 35 A
FILE ENTRASS2 VS
S2CHAVE-PRI
1 5 A
S2RESTO1
6 10 A
S2CHAVE-SEC1 16 5 A
S2RESTO2
21 10 A
S2CHAVE-SEC2 31 5 A
S2RESTO3
36 10 A
S2RESTO4
46 35 A
*---------------------------------------------------------------JOB INPUT ENTRAPP START DISPP
DISPLAY 'CHAVE-PRI=' PPCHAVE-PRI +
' CHAVE-S1=' PPCHAVE-SEC1 +
' CHAVE-S2=' PPCHAVE-SEC2 +
' R1=' PPRESTO1
+
' R2=' PPRESTO2
+
' R3=' PPRESTO3
+
' R4=' PPRESTO4
GOTO JOB
DISPP. PROC
DISPLAY '*************** LISTA POR CHAVE PRIMARIA ***********'
END-PROC
*---------------------------------------------------------------JOB INPUT ENTRASS1 START DISPS1
DISPLAY 'CHAVE-PRI=' S1CHAVE-PRI +
' CHAVE-S1=' S1CHAVE-SEC1 +
' CHAVE-S2=' S1CHAVE-SEC2 +
' R1=' S1RESTO1
+
' R2=' S1RESTO2
+
' R3=' S1RESTO3
+
' R4=' S1RESTO4
GOTO JOB
DISPS1. PROC
DISPLAY '*************** LISTA POR CHAVE ALTERN 1 ***********'
END-PROC
*---------------------------------------------------------------JOB INPUT ENTRASS2 START DISPS2
DISPLAY 'CHAVE-PRI=' S2CHAVE-PRI +
' CHAVE-S1=' S2CHAVE-SEC1 +
' CHAVE-S2=' S2CHAVE-SEC2 +
' R1=' S2RESTO1
+
' R2=' S2RESTO2
+
' R3=' S2RESTO3
+
' R4=' S2RESTO4
GOTO JOB
DISPS2. PROC
DISPLAY '*************** LISTA POR CHAVE ALTERN 2 ***********'
END-PROC
*---------------------------------------------------------------//*--------------------------------------------------------------//* LISTA INFORMACOES DO ARQUIVO
80
//*--------------------------------------------------------------//STEP6
EXEC PGM=IDCAMS
//SYSOUT
DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//SYSIN DD *
LISTCAT ENTRIES(DSVAABVS.LSG.A002.ALBERTO) ALL
81
RESTO1
RESTO1
RESTO1
RESTO1
RESTO1
RESTO1
RESTO1
RESTO1
RESTO1
RESTO1
RESTO1
RESTO1
RESTO1
RESTO1
RESTO1
RESTO1
RESTO1
RESTO1
RESTO1
RESTO1
RESTO1
:*CR1
:*CR1
:*CR1
:*CR1
:*CR1
:*CR1
:*CR1
:*CR1
:*CR1
:*CR1
:*CR1
:*CR1
:*CR1
:*CR1
:*CR1
:*CR1
:*CR1
:*CR1
:*CR1
:*CR1
:*CR1
CHAVE-PRI=00013
CHAVE-PRI=00014
CHAVE-PRI=00015
CHAVE-PRI=00016
CHAVE-PRI=00017
CHAVE-PRI=00018
CHAVE-PRI=00019
CHAVE-PRI=00020
CHAVE-PRI=00021
CHAVE-S1=00088
CHAVE-S1=00087
CHAVE-S1=00086
CHAVE-S1=00085
CHAVE-S1=00084
CHAVE-S1=00083
CHAVE-S1=00082
CHAVE-S1=00081
CHAVE-S1=00080
CHAVE-S2=00003
CHAVE-S2=00004
CHAVE-S2=00005
CHAVE-S2=00006
CHAVE-S2=00007
CHAVE-S2=00008
CHAVE-S2=00009
CHAVE-S2=00010
CHAVE-S2=00011
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
82
CHAVE-PRI=00005
CHAVE-PRI=00006
CHAVE-PRI=00007
CHAVE-PRI=00008
CHAVE-PRI=00009
CHAVE-S1=00096
CHAVE-S1=00095
CHAVE-S1=00094
CHAVE-S1=00093
CHAVE-S1=00092
CHAVE-S2=99995
CHAVE-S2=99996
CHAVE-S2=99997
CHAVE-S2=99998
CHAVE-S2=99999
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
83
Conceitos :
os registros a incluir podem estar em qualquer ordem;
o arquivo precisa ter pelo menos 1 registro j gravado (quando for aberto)
SELECT nome_arquivo
ORGANIZATION IS INDEXED
ACCESS IS RANDOM
FILE STATUS IS variavel_wss
RECORD KEY IS chave_primria
[ ALTERNATE RECORD KEY IS chave_alternada_1 ]
DDs
Procedimentos :
Abrir o arquivo com OPEN I-O nome_arquivo e testar file status :
File Status = 00 : OK
File Status 00 : erro
Preparar a rea de gravao (declarada na FILE SECTION) com os dados que formam o registro e
Gravar o registro com o comando WRITE nome_rea_fd e testar o file status :
File Status = 00 : WRITE OK. Registro incluido
File Status = 22 : erro : DUPKEY (chave primria do registro que se tentou incluir igual de
um registro j existente)
File Status outros : erro no WRITE
Fechar o arquivo com CLOSE nome_arquivo e testar file status :
File Status = 00 : OK
File Status 00 : erro
//ddname
DD
DISP=SHR,DSN=dsname_cluster
84
* ARQUIVO - VSAM KSDS JAH EXISTENTE; INCLUI REG POR CHAVE PRIMARIA
*----------------------------------------------------------------SELECT ARQUIVO ASSIGN TO ARQUIVO
ORGANIZATION INDEXED
ACCESS RANDOM
RECORD KEY A-FD-ARQUIVO-CHAVEP
FILE STATUS FS-ARQ.
*----------------------------------------------------------------DATA DIVISION.
FILE SECTION.
*----------------------------------------------------------------FD
ARQUIVO.
01
A-FD-ARQUIVO.
05 A-FD-ARQUIVO-CHAVEP
PIC X(05).
05 A-FD-ARQUIVO-RESTO1
PIC X(10).
05 A-FD-ARQUIVO-CHAVES1
PIC X(05).
05 A-FD-ARQUIVO-RESTO2
PIC X(10).
05 A-FD-ARQUIVO-CHAVES2
PIC X(05).
05 A-FD-ARQUIVO-RESTO3
PIC X(10).
05 A-FD-ARQUIVO-RESTO4
PIC X(35).
*----------------------------------------------------------------WORKING-STORAGE SECTION.
*
01 FS-ARQ
PIC X(02).
01 EOF-ARQUIVO
PIC X(03) VALUE 'NAO'.
01 STOP-ARQUIVO
PIC X(03) VALUE 'NAO'.
01 WW-ULTGRAVADO
PIC 9(5) VALUE ZERO.
01 WW-ARQUIVO
PIC 9(5) VALUE ZERO.
01 WW-CHAVEP
PIC 9(5) VALUE ZERO.
01 WW-CHAVES1
PIC 9(5) VALUE ZERO.
01 WW-CHAVES2
PIC 9(5) VALUE ZERO.
01 GG-ARQUIVO
PIC 9(5) VALUE ZERO.
*---------------------------------------------------------------PROCEDURE DIVISION.
*---------------------------------------------------------------PROGRAMA SECTION.
DISPLAY '------------------------------------------------'
DISPLAY 'GRAVACAO REGS NUM ARQUIVO QUE JAH TEM REGISTROS'
DISPLAY '------------------------------------------------'
*
OPEN I-O
ARQUIVO.
EVALUATE FS-ARQ
WHEN '00'
DISPLAY '
FS=' FS-ARQ ' OPEN OK'
WHEN OTHER
DISPLAY '
FS=' FS-ARQ ' OPEN ERRO'
MOVE 'SIM' TO STOP-ARQUIVO
END-EVALUATE
*
IF STOP-ARQUIVO EQUAL 'NAO'
PERFORM GRAVINCL2 UNTIL
WW-ARQUIVO > 10
OR
STOP-ARQUIVO = 'SIM'
END-IF
*
CLOSE ARQUIVO.
EVALUATE FS-ARQ
WHEN '00'
DISPLAY '
FS=' FS-ARQ ' CLOSE OK'
85
WHEN OTHER
DISPLAY '
END-EVALUATE
*
DISPLAY '------------------------------------------------'
DISPLAY 'GRAVADOS ARQUIVO
= ' GG-ARQUIVO
DISPLAY '------------------------------------------------'
STOP RUN.
*
*---------------------------------------------------------------* INCLUIR REGS EM ARQUIVO JAH EXISTENTE
*---------------------------------------------------------------GRAVINCL2 SECTION.
ADD
1
TO WW-ARQUIVO.
COMPUTE WW-CHAVEP
= WW-ARQUIVO + 500.
MOVE
WW-CHAVEP
TO A-FD-ARQUIVO-CHAVEP
MOVE
'#IR1'
TO A-FD-ARQUIVO-RESTO1
COMPUTE WW-CHAVES1
= 100200 - WW-ARQUIVO + 1
COMPUTE WW-CHAVES2
= 90090 + WW-ARQUIVO
MOVE
WW-CHAVES1
TO A-FD-ARQUIVO-CHAVES1
MOVE
WW-CHAVES2
TO A-FD-ARQUIVO-CHAVES2
MOVE
ALL '#IR2'
TO A-FD-ARQUIVO-RESTO2
MOVE
ALL '#IR3'
TO A-FD-ARQUIVO-RESTO3
MOVE
ALL '#IR4'
TO A-FD-ARQUIVO-RESTO4
*
WRITE A-FD-ARQUIVO
EVALUATE FS-ARQ
WHEN '00'
DISPLAY '
FS=' FS-ARQ ' WRITE OK'
' CHAVEP :' A-FD-ARQUIVO-CHAVEP
' CHAVES1:' A-FD-ARQUIVO-CHAVES1
' CHAVES2:' A-FD-ARQUIVO-CHAVES2
' RESTO1 :' A-FD-ARQUIVO-RESTO1
ADD 1 TO GG-ARQUIVO
IF WW-CHAVEP > WW-ULTGRAVADO
MOVE WW-CHAVEP TO WW-ULTGRAVADO
END-IF
WHEN '22'
DISPLAY '
FS=' FS-ARQ ' WRITE DUPKEY '
' CHAVEP : ' WW-CHAVEP
WHEN OTHER
DISPLAY '
FS=' FS-ARQ ' WRITE ERRO'
' CHAVEP : ' WW-CHAVEP
END-EVALUATE
*
CONTINUE.
SAI-GRAVINCL2. EXIT.
*
//GO.SYSPRINT DD SYSOUT=*
//GO.ARQUIVO
DD DSN=DSVAABVS.LSG.A002.ALBERTO,DISP=SHR
86
RESTO1
RESTO1
RESTO1
RESTO1
RESTO1
RESTO1
RESTO1
RESTO1
RESTO1
87
:#IR1
:#IR1
:#IR1
:#IR1
:#IR1
:#IR1
:#IR1
:#IR1
:#IR1
CHAVE-PRI=00016
CHAVE-PRI=00015
CHAVE-PRI=00014
CHAVE-PRI=00013
CHAVE-PRI=00012
CHAVE-PRI=00011
CHAVE-PRI=00010
CHAVE-PRI=00009
CHAVE-PRI=00008
CHAVE-PRI=00007
CHAVE-PRI=00006
CHAVE-PRI=00005
CHAVE-PRI=00004
CHAVE-PRI=00003
CHAVE-PRI=00002
CHAVE-PRI=00001
CHAVE-PRI=00511
CHAVE-PRI=00510
CHAVE-PRI=00509
CHAVE-PRI=00508
CHAVE-PRI=00507
CHAVE-PRI=00506
CHAVE-PRI=00505
CHAVE-PRI=00504
CHAVE-PRI=00503
CHAVE-PRI=00502
CHAVE-PRI=00501
CHAVE-S1=00085
CHAVE-S1=00086
CHAVE-S1=00087
CHAVE-S1=00088
CHAVE-S1=00089
CHAVE-S1=00090
CHAVE-S1=00091
CHAVE-S1=00092
CHAVE-S1=00093
CHAVE-S1=00094
CHAVE-S1=00095
CHAVE-S1=00096
CHAVE-S1=00097
CHAVE-S1=00098
CHAVE-S1=00099
CHAVE-S1=00100
CHAVE-S1=00190
CHAVE-S1=00191
CHAVE-S1=00192
CHAVE-S1=00193
CHAVE-S1=00194
CHAVE-S1=00195
CHAVE-S1=00196
CHAVE-S1=00197
CHAVE-S1=00198
CHAVE-S1=00199
CHAVE-S1=00200
CHAVE-S2=00006
CHAVE-S2=00005
CHAVE-S2=00004
CHAVE-S2=00003
CHAVE-S2=00002
CHAVE-S2=00001
CHAVE-S2=00000
CHAVE-S2=99999
CHAVE-S2=99998
CHAVE-S2=99997
CHAVE-S2=99996
CHAVE-S2=99995
CHAVE-S2=99994
CHAVE-S2=99993
CHAVE-S2=99992
CHAVE-S2=99991
CHAVE-S2=90101
CHAVE-S2=90100
CHAVE-S2=90099
CHAVE-S2=90098
CHAVE-S2=90097
CHAVE-S2=90096
CHAVE-S2=90095
CHAVE-S2=90094
CHAVE-S2=90093
CHAVE-S2=90092
CHAVE-S2=90091
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
88
CHAVE-PRI=00006
CHAVE-PRI=00007
CHAVE-PRI=00008
CHAVE-PRI=00009
CHAVE-S1=00095
CHAVE-S1=00094
CHAVE-S1=00093
CHAVE-S1=00092
CHAVE-S2=99996
CHAVE-S2=99997
CHAVE-S2=99998
CHAVE-S2=99999
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
89
Conceitos :
pode-se alterar dados exceto chaves
quando comando o REWRITE , o ltimo registro lido que alterado, independentemente de
como ele foi lido
SELECT nome_arquivo
ORGANIZATION IS INDEXED
ACCESS IS RANDOM
FILE STATUS IS variavel_wss
RECORD KEY IS chave_primria
[ ALTERNATE RECORD KEY IS chave_alternada_1 ]
DDs
Procedimentos :
Abrir o arquivo com OPEN I-O nome_arquivo e testar file status :
File Status = 00 : OK
File Status 00 : erro
Ler o registro que se deseja alterar (de qualquer maneira) :
Se se quiser fazer leitura direta : neste caso, a leitura deve ser feita conforme explicado
em LEITURA DIRETA por chave primria :
mover o valor da chave que identifica o registro desejado para a rea da RECORD KEY e em
seguida dar o comando READ nome_arquivo e testar file status :
File Status : 00 = OK ; 02 = READ OK , DUPKEY ; 23 = NOTFOUND
outros = erro
//ddname
DD
DISP=SHR,DSN=dsname_cluster
90
File Status = 00 : OK
File Status 00 : erro
Exemplos bsicos :
REWRITE area-fd INVALID KEY imperativo
Ex.: REWRITE AG INVALID KEY DISPLAY CHAVE INVALIDA
REWRITE area-fd NOT INVALID KEY imperativo
Ex.: REWRITE AG NOT INVALID KEY DISPLAY CHAVE OK. REGRAVADO
REWRITE area-fd FROM area-working-storage INVALID KEY imperativo
Ex.: REWRITE AG FROM REG-CADASTRO INVALID KEY CHAVE INVALIDA
REWRITE area-fd FROM area-working-storage NOT INVALID KEY imperativo
Ex.: REWRITE AG FROM REG-CADASTRO NOT INVALID KEY DISPLAY OK!!
91
*----------------------------------------------------------------WORKING-STORAGE SECTION.
01 FS-ARQ
PIC X(02).
01 EOF-ARQUIVO
PIC X(03) VALUE 'NAO'.
01 STOP-ARQUIVO
PIC X(03) VALUE 'NAO'.
01 LEU-ARQUIVO
PIC X(03) VALUE 'NAO'.
01 WW-ULTGRAVADO
PIC 9(5) VALUE ZERO.
01 WW-ARQUIVO
PIC 9(5) VALUE ZERO.
01 WW-CHAVEP
PIC 9(5) VALUE ZERO.
01 WW-CHAVES1
PIC 9(5) VALUE ZERO.
01 WW-CHAVES2
PIC 9(5) VALUE ZERO.
01 UU-ARQUIVO
PIC 9(5) VALUE ZERO.
*---------------------------------------------------------------PROCEDURE DIVISION.
*---------------------------------------------------------------PROGRAMA SECTION.
*
DISPLAY '------------------------------------------------'
DISPLAY 'UPDATE (IN-PLACE) DE REGISTROS POR CHAVE PRIMARIA'
DISPLAY '------------------------------------------------'
*
OPEN I-O
ARQUIVO.
EVALUATE FS-ARQ
WHEN '00'
DISPLAY '
FS=' FS-ARQ ' OPEN OK'
WHEN OTHER
DISPLAY '
FS=' FS-ARQ ' OPEN ERRO'
MOVE 'SIM' TO STOP-ARQUIVO
END-EVALUATE
*
IF STOP-ARQUIVO EQUAL 'NAO'
PERFORM GRAVUPDT UNTIL
WW-ARQUIVO > 5
OR
STOP-ARQUIVO = 'SIM'
END-IF
*
CLOSE ARQUIVO.
EVALUATE FS-ARQ
WHEN '00'
DISPLAY '
FS=' FS-ARQ ' CLOSE OK'
WHEN OTHER
DISPLAY '
FS=' FS-ARQ ' CLOSE ERRO'
END-EVALUATE
*
DISPLAY '------------------------------------------------'
DISPLAY 'REGRAVADOS ARQUIVO
= ' UU-ARQUIVO
DISPLAY '------------------------------------------------'
STOP RUN.
*---------------------------------------------------------------* EFETUAR UPDATE
*---------------------------------------------------------------GRAVUPDT SECTION.
ADD
1
TO WW-ARQUIVO.
MOVE
WW-ARQUIVO
TO WW-CHAVEP.
PERFORM LER-PARA-POSICIONAR
*
IF
LEU-ARQUIVO
= 'SIM'
MOVE
'@UR1
'
TO A-FD-ARQUIVO-RESTO1
MOVE
'@UR2
'
TO A-FD-ARQUIVO-RESTO2
92
MOVE
MOVE
'@UR3
'@UR4
'
'
TO A-FD-ARQUIVO-RESTO3
TO A-FD-ARQUIVO-RESTO4
*
REWRITE A-FD-ARQUIVO
EVALUATE FS-ARQ
WHEN '00'
DISPLAY '
FS=' FS-ARQ ' REWRITE OK'
' CHAVEP:' A-FD-ARQUIVO-CHAVEP
' CHAVES1:' A-FD-ARQUIVO-CHAVES1
' CHAVES2:' A-FD-ARQUIVO-CHAVES2
' RESTO1:' A-FD-ARQUIVO-RESTO1
ADD 1 TO UU-ARQUIVO
WHEN '21'
DISPLAY '
FS=' FS-ARQ ' REWRITE CHAVE MUDADA'
' CHAVEP :' WW-CHAVEP
WHEN '22'
DISPLAY '
FS=' FS-ARQ ' REWRITE DUPKEY'
' CHAVEP :' WW-CHAVEP
WHEN '23'
DISPLAY '
FS=' FS-ARQ ' REWRITE NOTFOUND'
' CHAVEP :' WW-CHAVEP
WHEN OTHER
DISPLAY '
FS=' FS-ARQ ' REWRITE ERRO'
' CHAVEP :' WW-CHAVEP
END-EVALUATE
END-IF
*
CONTINUE.
SAI-GRAVUPDT. EXIT.
*---------------------------------------------------------------* LE UM REGISTRO PARA PODER ATUALIZA-LO
*---------------------------------------------------------------LER-PARA-POSICIONAR SECTION.
MOVE
'NAO'
TO LEU-ARQUIVO
MOVE
WW-CHAVEP
TO A-FD-ARQUIVO-CHAVEP
READ
ARQUIVO
EVALUATE FS-ARQ
WHEN '00'
DISPLAY '
FS=' FS-ARQ ' READ OK ' WW-CHAVEP
MOVE
'SIM' TO LEU-ARQUIVO
WHEN '02'
DISPLAY '
FS=' FS-ARQ ' READ KEYDUP ' WW-CHAVEP
WHEN '23'
DISPLAY '
FS=' FS-ARQ ' READ NOTFOUND ' WW-CHAVEP
WHEN OTHER
DISPLAY '
FS=' FS-ARQ ' READ ERRO ' WW-CHAVEP
END-EVALUATE
CONTINUE.
SAI-LER-PARA-POSICIONAR. EXIT.
//GO.SYSPRINT DD SYSOUT=*
//GO.ARQUIVO
DD DSN=DSVAABVS.LSG.A002.ALBERTO,DISP=SHR
93
RESTO1:@UR1
RESTO1:@UR1
RESTO1:@UR1
RESTO1:@UR1
RESTO1:@UR1
RESTO1:@UR1
94
CHAVE-PRI=00018
CHAVE-PRI=00017
CHAVE-PRI=00016
CHAVE-PRI=00015
CHAVE-PRI=00014
CHAVE-PRI=00013
CHAVE-PRI=00012
CHAVE-PRI=00011
CHAVE-PRI=00010
CHAVE-PRI=00009
CHAVE-PRI=00008
CHAVE-PRI=00007
CHAVE-PRI=00006
CHAVE-PRI=00005
CHAVE-PRI=00004
CHAVE-PRI=00003
CHAVE-PRI=00002
CHAVE-PRI=00001
CHAVE-PRI=00511
CHAVE-PRI=00510
CHAVE-PRI=00509
CHAVE-PRI=00508
CHAVE-PRI=00507
CHAVE-PRI=00506
CHAVE-PRI=00505
CHAVE-PRI=00504
CHAVE-PRI=00503
CHAVE-PRI=00502
CHAVE-PRI=00501
CHAVE-S1=00083
CHAVE-S1=00084
CHAVE-S1=00085
CHAVE-S1=00086
CHAVE-S1=00087
CHAVE-S1=00088
CHAVE-S1=00089
CHAVE-S1=00090
CHAVE-S1=00091
CHAVE-S1=00092
CHAVE-S1=00093
CHAVE-S1=00094
CHAVE-S1=00095
CHAVE-S1=00096
CHAVE-S1=00097
CHAVE-S1=00098
CHAVE-S1=00099
CHAVE-S1=00100
CHAVE-S1=00190
CHAVE-S1=00191
CHAVE-S1=00192
CHAVE-S1=00193
CHAVE-S1=00194
CHAVE-S1=00195
CHAVE-S1=00196
CHAVE-S1=00197
CHAVE-S1=00198
CHAVE-S1=00199
CHAVE-S1=00200
CHAVE-S2=00008
CHAVE-S2=00007
CHAVE-S2=00006
CHAVE-S2=00005
CHAVE-S2=00004
CHAVE-S2=00003
CHAVE-S2=00002
CHAVE-S2=00001
CHAVE-S2=00000
CHAVE-S2=99999
CHAVE-S2=99998
CHAVE-S2=99997
CHAVE-S2=99996
CHAVE-S2=99995
CHAVE-S2=99994
CHAVE-S2=99993
CHAVE-S2=99992
CHAVE-S2=99991
CHAVE-S2=90101
CHAVE-S2=90100
CHAVE-S2=90099
CHAVE-S2=90098
CHAVE-S2=90097
CHAVE-S2=90096
CHAVE-S2=90095
CHAVE-S2=90094
CHAVE-S2=90093
CHAVE-S2=90092
CHAVE-S2=90091
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
R1=*CR1
R1=@UR1
R1=@UR1
R1=@UR1
R1=@UR1
R1=@UR1
R1=@UR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
95
CHAVE-PRI=00004
CHAVE-PRI=00005
CHAVE-PRI=00006
CHAVE-PRI=00007
CHAVE-PRI=00008
CHAVE-PRI=00009
CHAVE-S1=00097
CHAVE-S1=00096
CHAVE-S1=00095
CHAVE-S1=00094
CHAVE-S1=00093
CHAVE-S1=00092
CHAVE-S2=99994
CHAVE-S2=99995
CHAVE-S2=99996
CHAVE-S2=99997
CHAVE-S2=99998
CHAVE-S2=99999
R1=@UR1
R1=@UR1
R1=@UR1
R1=*CR1
R1=*CR1
R1=*CR1
96
Conceitos :
pode-se alterar dados exceto chaves
quando comando o REWRITE , o ltimo registro lido que alterado, independentemente de
como ele foi lido
SELECT nome_arquivo
ORGANIZATION IS INDEXED
ACCESS IS RANDOM
FILE STATUS IS variavel_wss
RECORD KEY IS chave_alternada_1
DDs
Procedimentos :
Abrir o arquivo com OPEN I-O nome_arquivo e testar file status :
File Status = 00 : OK
File Status 00 : erro
Ler o registro que se deseja alterar;
//ddname
DD
DISP=SHR,DSN=dsname_cluster.PATH.AIX1
97
Exemplos bsicos :
REWRITE area-fd INVALID KEY imperativo
Ex.: REWRITE AG INVALID KEY DISPLAY CHAVE INVALIDA
REWRITE area-fd NOT INVALID KEY imperativo
Ex.: REWRITE AG NOT INVALID KEY DISPLAY CHAVE OK. REGRAVADO
REWRITE area-fd FROM area-working-storage INVALID KEY imperativo
Ex.: REWRITE AG FROM REG-CADASTRO INVALID KEY CHAVE INVALIDA
REWRITE area-fd FROM area-working-storage NOT INVALID KEY imperativo
Ex.: REWRITE AG FROM REG-CADASTRO NOT INVALID KEY DISPLAY OK !!
98
*----------------------------------------------------------------WORKING-STORAGE SECTION.
*
01 FS-ARQ
PIC X(02).
01 EOF-ARQUIVO
PIC X(03) VALUE 'NAO'.
01 STOP-ARQUIVO
PIC X(03) VALUE 'NAO'.
01 LEU-ARQUIVO
PIC X(03) VALUE 'NAO'.
01 WW-ULTGRAVADO
PIC 9(5) VALUE ZERO.
01 WW-ARQUIVO
PIC 9(5) VALUE ZERO.
01 WW-CHAVEP
PIC 9(5) VALUE ZERO.
01 WW-CHAVES1
PIC 9(5) VALUE ZERO.
01 WW-CHAVES2
PIC 9(5) VALUE ZERO.
01 UU-ARQUIVO
PIC 9(5) VALUE ZERO.
*---------------------------------------------------------------PROCEDURE DIVISION.
*---------------------------------------------------------------PROGRAMA SECTION.
*
DISPLAY '------------------------------------------------'
DISPLAY 'UPDATE (IN-PLACE) DE REGS POR CHAVE ALTERNADA 1 '
DISPLAY '------------------------------------------------'
*
OPEN I-O
ARQUIVO.
EVALUATE FS-ARQ
WHEN '00'
DISPLAY '
FS=' FS-ARQ ' OPEN OK'
WHEN OTHER
DISPLAY '
FS=' FS-ARQ ' OPEN ERRO'
MOVE 'SIM' TO STOP-ARQUIVO
END-EVALUATE
*
IF STOP-ARQUIVO EQUAL 'NAO'
PERFORM GRAVUPDT UNTIL
WW-ARQUIVO > 4
OR
STOP-ARQUIVO = 'SIM'
END-IF
*
CLOSE ARQUIVO.
EVALUATE FS-ARQ
WHEN '00'
DISPLAY '
FS=' FS-ARQ ' CLOSE OK'
WHEN OTHER
DISPLAY '
FS=' FS-ARQ ' CLOSE ERRO'
END-EVALUATE
*
DISPLAY '------------------------------------------------'
DISPLAY 'REGRAVADOS ARQUIVO
= ' UU-ARQUIVO
DISPLAY '------------------------------------------------'
STOP RUN.
*
*---------------------------------------------------------------* EFETUAR UPDATE
*---------------------------------------------------------------GRAVUPDT SECTION.
*
ADD
1
TO WW-ARQUIVO.
COMPUTE WW-CHAVES1 = WW-ARQUIVO + 80
*
PERFORM LER-PARA-POSICIONAR
99
*
IF
MOVE
MOVE
MOVE
MOVE
LEU-ARQUIVO
'$UR1
'
'$UR2
'
'$UR3
'
'$UR4
'
= 'SIM'
TO A-FD-ARQUIVO-RESTO1
TO A-FD-ARQUIVO-RESTO2
TO A-FD-ARQUIVO-RESTO3
TO A-FD-ARQUIVO-RESTO4
*
REWRITE A-FD-ARQUIVO
EVALUATE FS-ARQ
WHEN '00'
DISPLAY '
FS=' FS-ARQ ' REWRITE OK'
' CHAVEP:' A-FD-ARQUIVO-CHAVEP
' CHAVES1:' A-FD-ARQUIVO-CHAVES1
' CHAVES2:' A-FD-ARQUIVO-CHAVES2
' RESTO1:' A-FD-ARQUIVO-RESTO1
MOVE
'SIM' TO LEU-ARQUIVO
ADD 1 TO UU-ARQUIVO
WHEN '21'
DISPLAY '
FS=' FS-ARQ ' REWRITE CHAVE MUDADA'
' CHAVEP :' WW-CHAVEP
WHEN '22'
DISPLAY '
FS=' FS-ARQ ' REWRITE DUPKEY'
' CHAVEP :' WW-CHAVEP
WHEN '23'
DISPLAY '
FS=' FS-ARQ ' REWRITE NOTFOUND'
' CHAVEP :' WW-CHAVEP
WHEN OTHER
DISPLAY '
FS=' FS-ARQ ' REWRITE ERRO'
' CHAVEP :' WW-CHAVEP
END-EVALUATE
END-IF
*
CONTINUE.
SAI-GRAVUPDT. EXIT.
*---------------------------------------------------------------* LE UM REGISTRO PARA PODER ATUALIZA-LO
*---------------------------------------------------------------LER-PARA-POSICIONAR SECTION.
MOVE
'NAO'
TO LEU-ARQUIVO
MOVE
WW-CHAVES1
TO A-FD-ARQUIVO-CHAVES1
READ
ARQUIVO
EVALUATE FS-ARQ
WHEN '00'
DISPLAY '
FS=' FS-ARQ ' READ
OK'
' CHAVEP:' A-FD-ARQUIVO-CHAVEP
' CHAVES1:' A-FD-ARQUIVO-CHAVES1
' CHAVES2:' A-FD-ARQUIVO-CHAVES2
MOVE
'SIM' TO LEU-ARQUIVO
WHEN '02'
DISPLAY '
FS=' FS-ARQ ' READ KEYDUP
' WW-CHAVES1
WHEN '23'
DISPLAY '
FS=' FS-ARQ ' READ NOTFOUND ' WW-CHAVES1
WHEN OTHER
DISPLAY '
FS=' FS-ARQ ' READ ERRO
' WW-CHAVES1
END-EVALUATE
*
CONTINUE.
SAI-LER-PARA-POSICIONAR. EXIT.
*
100
//GO.SYSPRINT
//GO.ARQUIVO
DD SYSOUT=*
DD DSN=DSVAABVS.LSG.A002.ALBERTO.PATH.AIX1,DISP=SHR
101
RESTO1:$UR1
RESTO1:$UR1
RESTO1:$UR1
RESTO1:$UR1
RESTO1:$UR1
102
CHAVE-PRI=00505
CHAVE-PRI=00506
CHAVE-PRI=00507
CHAVE-PRI=00508
CHAVE-PRI=00509
CHAVE-PRI=00510
CHAVE-PRI=00511
CHAVE-PRI=00001
CHAVE-PRI=00002
CHAVE-PRI=00003
CHAVE-PRI=00004
CHAVE-PRI=00005
CHAVE-PRI=00006
CHAVE-PRI=00007
CHAVE-PRI=00008
CHAVE-PRI=00009
CHAVE-S1=00196
CHAVE-S1=00195
CHAVE-S1=00194
CHAVE-S1=00193
CHAVE-S1=00192
CHAVE-S1=00191
CHAVE-S1=00190
CHAVE-S1=00100
CHAVE-S1=00099
CHAVE-S1=00098
CHAVE-S1=00097
CHAVE-S1=00096
CHAVE-S1=00095
CHAVE-S1=00094
CHAVE-S1=00093
CHAVE-S1=00092
CHAVE-S2=90095
CHAVE-S2=90096
CHAVE-S2=90097
CHAVE-S2=90098
CHAVE-S2=90099
CHAVE-S2=90100
CHAVE-S2=90101
CHAVE-S2=99991
CHAVE-S2=99992
CHAVE-S2=99993
CHAVE-S2=99994
CHAVE-S2=99995
CHAVE-S2=99996
CHAVE-S2=99997
CHAVE-S2=99998
CHAVE-S2=99999
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=@UR1
R1=@UR1
R1=@UR1
R1=@UR1
R1=@UR1
R1=@UR1
R1=*CR1
R1=*CR1
R1=*CR1
103
Conceitos :
pode-se alterar dados exceto chaves
quando comando o REWRITE , o ltimo registro lido que alterado, independentemente de
como ele foi lido
SELECT nome_arquivo
ORGANIZATION IS INDEXED
ACCESS IS RANDOM
FILE STATUS IS variavel_wss
RECORD KEY IS chave_alternada_2
DDs
Procedimentos :
Abrir o arquivo com OPEN I-O nome_arquivo e testar file status :
File Status = 00 : OK
File Status 00 : erro
Ler o registro que se deseja alterar;
//ddname
DD
DISP=SHR,DSN=dsname_cluster.PATH.AIX2
104
Exemplos bsicos :
REWRITE area-fd INVALID KEY imperativo
Ex.: REWRITE AG INVALID KEY DISPLAY CHAVE INVALIDA
REWRITE area-fd NOT INVALID KEY imperativo
Ex.: REWRITE AG NOT INVALID KEY DISPLAY CHAVE OK. REGRAVADO
REWRITE area-fd FROM area-working-storage INVALID KEY imperativo
Ex.: REWRITE AG FROM REG-CADASTRO INVALID KEY CHAVE INVALIDA
REWRITE area-fd FROM area-working-storage NOT INVALID KEY imperativo
Ex.: REWRITE AG FROM REG-CADASTRO NOT INVALID KEY DISPLAY OK !!
105
05 A-FD-ARQUIVO-RESTO4
PIC X(35).
*----------------------------------------------------------------WORKING-STORAGE SECTION.
*
01 FS-ARQ
PIC X(02).
01 EOF-ARQUIVO
PIC X(03) VALUE 'NAO'.
01 STOP-ARQUIVO
PIC X(03) VALUE 'NAO'.
01 LEU-ARQUIVO
PIC X(03) VALUE 'NAO'.
01 WW-ULTGRAVADO
PIC 9(5) VALUE ZERO.
01 WW-ARQUIVO
PIC 9(5) VALUE ZERO.
01 WW-CHAVEP
PIC 9(5) VALUE ZERO.
01 WW-CHAVES1
PIC 9(5) VALUE ZERO.
01 WW-CHAVES2
PIC 9(5) VALUE ZERO.
01 UU-ARQUIVO
PIC 9(5) VALUE ZERO.
*---------------------------------------------------------------PROCEDURE DIVISION.
*---------------------------------------------------------------PROGRAMA SECTION.
*
DISPLAY '------------------------------------------------'
DISPLAY 'UPDATE (IN-PLACE) DE REGS POR CHAVE ALTERNADA 2 '
DISPLAY '------------------------------------------------'
*
OPEN I-O
ARQUIVO.
EVALUATE FS-ARQ
WHEN '00'
DISPLAY '
FS=' FS-ARQ ' OPEN OK'
WHEN OTHER
DISPLAY '
FS=' FS-ARQ ' OPEN ERRO'
MOVE 'SIM' TO STOP-ARQUIVO
END-EVALUATE
*
IF STOP-ARQUIVO EQUAL 'NAO'
PERFORM GRAVUPDT UNTIL
WW-ARQUIVO > 4
OR
STOP-ARQUIVO = 'SIM'
END-IF
*
CLOSE ARQUIVO.
EVALUATE FS-ARQ
WHEN '00'
DISPLAY '
FS=' FS-ARQ ' CLOSE OK'
WHEN OTHER
DISPLAY '
FS=' FS-ARQ ' CLOSE ERRO'
END-EVALUATE
*
DISPLAY '------------------------------------------------'
DISPLAY 'REGRAVADOS ARQUIVO
= ' UU-ARQUIVO
DISPLAY '------------------------------------------------'
STOP RUN.
*
*---------------------------------------------------------------* EFETUAR UPDATE
*---------------------------------------------------------------GRAVUPDT SECTION.
*
ADD
1
TO WW-ARQUIVO.
MOVE
WW-ARQUIVO
TO WW-CHAVES2.
*
106
PERFORM LER-PARA-POSICIONAR
*
IF
MOVE
MOVE
MOVE
MOVE
LEU-ARQUIVO
'#UR1
'
'#UR2
'
'#UR3
'
'#UR4
'
= 'SIM'
TO A-FD-ARQUIVO-RESTO1
TO A-FD-ARQUIVO-RESTO2
TO A-FD-ARQUIVO-RESTO3
TO A-FD-ARQUIVO-RESTO4
*
REWRITE A-FD-ARQUIVO
EVALUATE FS-ARQ
WHEN '00'
DISPLAY '
FS=' FS-ARQ ' REWRITE OK'
' CHAVEP:' A-FD-ARQUIVO-CHAVEP
' CHAVES1:' A-FD-ARQUIVO-CHAVES1
' CHAVES2:' A-FD-ARQUIVO-CHAVES2
' RESTO1:' A-FD-ARQUIVO-RESTO1
MOVE
'SIM' TO LEU-ARQUIVO
ADD 1 TO UU-ARQUIVO
WHEN '21'
DISPLAY '
FS=' FS-ARQ ' REWRITE CHAVE MUDADA'
' CHAVEP :' WW-CHAVEP
WHEN '22'
DISPLAY '
FS=' FS-ARQ ' REWRITE DUPKEY'
' CHAVEP :' WW-CHAVEP
WHEN '23'
DISPLAY '
FS=' FS-ARQ ' REWRITE NOTFOUND'
' CHAVEP :' WW-CHAVEP
WHEN OTHER
DISPLAY '
FS=' FS-ARQ ' REWRITE ERRO'
' CHAVEP :' WW-CHAVEP
END-EVALUATE
END-IF
*
CONTINUE.
SAI-GRAVUPDT. EXIT.
*---------------------------------------------------------------* LE UM REGISTRO PARA PODER ATUALIZA-LO
*---------------------------------------------------------------LER-PARA-POSICIONAR SECTION.
*
MOVE
'NAO'
TO LEU-ARQUIVO
MOVE
WW-CHAVES2
TO A-FD-ARQUIVO-CHAVES2
READ
ARQUIVO
EVALUATE FS-ARQ
WHEN '00'
DISPLAY '
FS=' FS-ARQ ' READ
OK'
' CHAVEP:' A-FD-ARQUIVO-CHAVEP
' CHAVES1:' A-FD-ARQUIVO-CHAVES1
' CHAVES2:' A-FD-ARQUIVO-CHAVES2
MOVE
'SIM' TO LEU-ARQUIVO
WHEN '02'
DISPLAY '
FS=' FS-ARQ ' READ KEYDUP
' WW-CHAVES2
WHEN '23'
DISPLAY '
FS=' FS-ARQ ' READ NOTFOUND ' WW-CHAVES2
WHEN OTHER
DISPLAY '
FS=' FS-ARQ ' READ ERRO
' WW-CHAVES2
END-EVALUATE
*
CONTINUE.
107
SAI-LER-PARA-POSICIONAR. EXIT.
*
//GO.SYSPRINT DD SYSOUT=*
//GO.ARQUIVO
DD DSN=DSVAABVS.LSG.A002.ALBERTO.PATH.AIX2,DISP=SHR
108
RESTO1:#UR1
RESTO1:#UR1
RESTO1:#UR1
RESTO1:#UR1
RESTO1:#UR1
109
CHAVE-PRI=00502
CHAVE-PRI=00503
CHAVE-PRI=00504
CHAVE-PRI=00505
CHAVE-PRI=00506
CHAVE-PRI=00507
CHAVE-PRI=00508
CHAVE-PRI=00509
CHAVE-PRI=00510
CHAVE-PRI=00511
CHAVE-PRI=00001
CHAVE-PRI=00002
CHAVE-PRI=00003
CHAVE-PRI=00004
CHAVE-PRI=00005
CHAVE-PRI=00006
CHAVE-PRI=00007
CHAVE-PRI=00008
CHAVE-PRI=00009
CHAVE-S1=00199
CHAVE-S1=00198
CHAVE-S1=00197
CHAVE-S1=00196
CHAVE-S1=00195
CHAVE-S1=00194
CHAVE-S1=00193
CHAVE-S1=00192
CHAVE-S1=00191
CHAVE-S1=00190
CHAVE-S1=00100
CHAVE-S1=00099
CHAVE-S1=00098
CHAVE-S1=00097
CHAVE-S1=00096
CHAVE-S1=00095
CHAVE-S1=00094
CHAVE-S1=00093
CHAVE-S1=00092
CHAVE-S2=90092
CHAVE-S2=90093
CHAVE-S2=90094
CHAVE-S2=90095
CHAVE-S2=90096
CHAVE-S2=90097
CHAVE-S2=90098
CHAVE-S2=90099
CHAVE-S2=90100
CHAVE-S2=90101
CHAVE-S2=99991
CHAVE-S2=99992
CHAVE-S2=99993
CHAVE-S2=99994
CHAVE-S2=99995
CHAVE-S2=99996
CHAVE-S2=99997
CHAVE-S2=99998
CHAVE-S2=99999
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=@UR1
R1=@UR1
R1=@UR1
R1=@UR1
R1=@UR1
R1=@UR1
R1=*CR1
R1=*CR1
R1=*CR1
110
SELECT nome_arquivo
ORGANIZATION IS INDEXED
ACCESS IS SEQUENTIAL
FILE STATUS IS variavel_wss
RECORD KEY IS chave_primaria
DDs
Procedimentos :
Abrir o arquivo com OPEN INPUT nome_arquivo e testar file status :
File Status = 00 : OK
File Status 00 : erro
Ler com o comando READ nome_arquivo (sem o AT END !!!) e testar a condio de fim de
arquivo testando o file status
File Status = 10 : EOF (fim de arquivo)
File Status outros : erro no READ
Fechar o arquivo com CLOSE nome_arquivo e testar file status :
File Status = 00 : OK
File Status 00 : erro
//ddname
DD
DISP=SHR,DSN=dsname_cluster
111
112
*---------------------------------------------------------------LERSEQS SECTION.
READ ARQUIVO
EVALUATE FS-ARQUIVO
WHEN '00'
DISPLAY '
FS=' FS-ARQUIVO ' READ OK' ' REG '
' CHAVEP : ' A-FD-ARQUIVO-CHAVEP
' CHAVES1 : ' A-FD-ARQUIVO-CHAVES1
' CHAVES2 : ' A-FD-ARQUIVO-CHAVES2
ADD 1 TO LL-ARQUIVO
WHEN '10'
DISPLAY '
FS=' FS-ARQUIVO ' READ EOF'
MOVE 'SIM' TO EOF-ARQUIVO
WHEN OTHER
DISPLAY '
FS=' FS-ARQUIVO ' READ ERRO'
MOVE 'SIM' TO STOP-ARQUIVO
END-EVALUATE
CONTINUE.
SAI-LERSEQS. EXIT.
//GO.SYSPRINT DD SYSOUT=*
//GO.ARQUIVO
DD DSN=DSVAABVS.LSG.A002.ALBERTO,DISP=SHR
113
00100
00099
00098
00097
00096
00095
00094
00093
00092
00091
00090
00089
00088
00087
00086
00085
00084
00083
00082
00081
00080
00200
00199
00198
00197
00196
00195
00194
00193
00192
00191
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
99991
99992
99993
99994
99995
99996
99997
99998
99999
00000
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
90091
90092
90093
90094
90095
90096
90097
90098
90099
90100
114
CHAVES2 : 90101
SELECT nome_arquivo
ORGANIZATION IS INDEXED
ACCESS IS SEQUENTIAL
FILE STATUS IS variavel_wss
RECORD KEY IS chave_alternada_1
DDs
Procedimentos :
Abrir o arquivo com OPEN INPUT nome_arquivo e testar file status :
File Status = 00 : OK
File Status 00 : erro
Ler com o comando READ nome_arquivo (sem o AT END !!!) e testar a condio de fim de
arquivo testando o file status
File Status = 10 : EOF (fim de arquivo)
File Status outros : erro no READ
Fechar o arquivo com CLOSE nome_arquivo e testar file status :
File Status = 00 : OK
File Status 00 : erro
//ddname
DD
DISP=SHR,DSN=dsname_cluster.PATH.AIX1
115
DATA DIVISION.
FILE SECTION.
*------------*
FD
ARQUIVO.
01
A-FD-ARQUIVO.
05 A-FD-ARQUIVO-CHAVEP
PIC X(05).
05 A-FD-ARQUIVO-RESTO1
PIC X(10).
05 A-FD-ARQUIVO-CHAVES1
PIC X(05).
05 A-FD-ARQUIVO-RESTO2
PIC X(10).
05 A-FD-ARQUIVO-CHAVES2
PIC X(05).
05 A-FD-ARQUIVO-RESTO3
PIC X(10).
05 A-FD-ARQUIVO-RESTO4
PIC X(35).
*----------------------------------------------------------------WORKING-STORAGE SECTION.
01 FS-ARQUIVO
PIC X(02).
01 EOF-ARQUIVO
PIC X(03) VALUE 'NAO'.
01 STOP-ARQUIVO
PIC X(03) VALUE 'NAO'.
01 LL-ARQUIVO
PIC 9(5) VALUE ZERO.
01 WW-CHAVEP
PIC 9(5) VALUE ZERO.
01 WW-CHAVES
PIC 9(5) VALUE ZERO.
01 WW-FORAFAIXA
PIC X(03) VALUE 'NAO'.
01 WW-CHAVE-INI-FAIXA PIC X(05).
01 WW-CHAVE-FIM-FAIXA PIC X(05).
*---------------------------------------------------------------PROCEDURE DIVISION.
*---------------------------------------------------------------PROGRAMA SECTION.
DISPLAY '------------------------------------------------'
DISPLAY 'LEITURA SEQUENCIAL POR CHAVE ALTERNADA 1'
DISPLAY '------------------------------------------------'
*
OPEN
INPUT ARQUIVO.
EVALUATE FS-ARQUIVO
WHEN '00'
DISPLAY '
FS=' FS-ARQUIVO ' OPEN OK'
WHEN OTHER
DISPLAY '
FS=' FS-ARQUIVO ' OPEN ERRO'
MOVE 'SIM' TO STOP-ARQUIVO
END-EVALUATE
*
PERFORM LERSEQS UNTIL EOF-ARQUIVO = 'SIM' OR
STOP-ARQUIVO = 'SIM'
*
CLOSE ARQUIVO.
EVALUATE FS-ARQUIVO
WHEN '00'
DISPLAY '
FS=' FS-ARQUIVO ' CLOSE OK'
WHEN OTHER
DISPLAY '
FS=' FS-ARQUIVO ' CLOSE ERRO'
END-EVALUATE
DISPLAY '------------------------------------------------'
DISPLAY 'LIDOS ARQUIVO : ' LL-ARQUIVO
DISPLAY '------------------------------------------------'
STOP RUN.
*---------------------------------------------------------------* LEITURA SEQUENCIAL POR CHAVE SECUNDARIA
*---------------------------------------------------------------LERSEQS SECTION.
READ ARQUIVO
116
EVALUATE FS-ARQUIVO
WHEN '00'
DISPLAY '
FS=' FS-ARQUIVO ' READ OK' ' REG'
' CHAVEP : ' A-FD-ARQUIVO-CHAVEP
' CHAVES1 : ' A-FD-ARQUIVO-CHAVES1
' CHAVES2 : ' A-FD-ARQUIVO-CHAVES2
ADD 1 TO LL-ARQUIVO
WHEN '10'
DISPLAY '
FS=' FS-ARQUIVO ' READ EOF'
MOVE 'SIM' TO EOF-ARQUIVO
MOVE 'SIM' TO STOP-ARQUIVO
WHEN OTHER
DISPLAY '
FS=' FS-ARQUIVO ' READ ERRO'
MOVE 'SIM' TO STOP-ARQUIVO
END-EVALUATE
CONTINUE.
SAI-LERSEQS. EXIT.
//GO.SYSPRINT DD SYSOUT=*
//GO.ARQUIVO
DD DSN=DSVAABVS.LSG.A002.ALBERTO.PATH.AIX1,DISP=SHR
117
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
00011
00010
00009
00008
00007
00006
00005
00004
00003
00002
00001
00000
99999
99998
99997
99996
99995
99994
99993
99992
99991
90101
90100
90099
90098
90097
90096
90095
90094
90093
90092
90091
FS=00 CLOSE OK
-----------------------------------------------LIDOS ARQUIVO : 00032
------------------------------------------------
118
SELECT nome_arquivo
ORGANIZATION IS INDEXED
ACCESS IS SEQUENTIAL
FILE STATUS IS variavel_wss
RECORD KEY IS chave_alternada_2
DDs
Procedimentos :
Abrir o arquivo com OPEN INPUT nome_arquivo e testar file status :
File Status = 00 : OK
File Status 00 : erro
Ler com o comando READ nome_arquivo (sem o AT END !!!) e testar a condio de fim de
arquivo testando o file status
File Status = 10 : EOF (fim de arquivo)
File Status outros : erro no READ
Fechar o arquivo com CLOSE nome_arquivo e testar file status :
File Status = 00 : OK
File Status 00 : erro
//ddname
DD
DISP=SHR,DSN=dsname_cluster.PATH.AIX2
119
DATA DIVISION.
FILE SECTION.
*------------*
FD
ARQUIVO.
01
A-FD-ARQUIVO.
05 A-FD-ARQUIVO-CHAVEP
PIC X(05).
05 A-FD-ARQUIVO-RESTO1
PIC X(10).
05 A-FD-ARQUIVO-CHAVES1
PIC X(05).
05 A-FD-ARQUIVO-RESTO2
PIC X(10).
05 A-FD-ARQUIVO-CHAVES2
PIC X(05).
05 A-FD-ARQUIVO-RESTO3
PIC X(10).
05 A-FD-ARQUIVO-RESTO4
PIC X(35).
*----------------------------------------------------------------WORKING-STORAGE SECTION.
01 FS-ARQUIVO
PIC X(02).
01 EOF-ARQUIVO
PIC X(03) VALUE 'NAO'.
01 STOP-ARQUIVO
PIC X(03) VALUE 'NAO'.
01 LL-ARQUIVO
PIC 9(5) VALUE ZERO.
01 WW-CHAVEP
PIC 9(5) VALUE ZERO.
01 WW-CHAVES
PIC 9(5) VALUE ZERO.
01 WW-FORAFAIXA
PIC X(03) VALUE 'NAO'.
01 WW-CHAVE-INI-FAIXA PIC X(05).
01 WW-CHAVE-FIM-FAIXA PIC X(05).
*---------------------------------------------------------------PROCEDURE DIVISION.
*---------------------------------------------------------------PROGRAMA SECTION.
DISPLAY '------------------------------------------------'
DISPLAY 'LEITURA SEQUENCIAL POR CHAVE ALTERNADA 2'
DISPLAY '------------------------------------------------'
*
OPEN
INPUT ARQUIVO.
EVALUATE FS-ARQUIVO
WHEN '00'
DISPLAY '
FS=' FS-ARQUIVO ' OPEN OK'
WHEN OTHER
DISPLAY '
FS=' FS-ARQUIVO ' OPEN ERRO'
MOVE 'SIM' TO STOP-ARQUIVO
END-EVALUATE
*
PERFORM LERSEQS UNTIL EOF-ARQUIVO = 'SIM' OR
STOP-ARQUIVO = 'SIM'
*
CLOSE ARQUIVO.
EVALUATE FS-ARQUIVO
WHEN '00'
DISPLAY '
FS=' FS-ARQUIVO ' CLOSE OK'
WHEN OTHER
DISPLAY '
FS=' FS-ARQUIVO ' CLOSE ERRO'
END-EVALUATE
DISPLAY '------------------------------------------------'
DISPLAY 'LIDOS ARQUIVO : ' LL-ARQUIVO
DISPLAY '------------------------------------------------'
STOP RUN.
*---------------------------------------------------------------* LEITURA SEQUENCIAL POR CHAVE SECUNDARIA
*---------------------------------------------------------------LERSEQS SECTION.
READ ARQUIVO
120
EVALUATE FS-ARQUIVO
WHEN '00'
DISPLAY '
FS=' FS-ARQUIVO ' READ OK' ' REG'
' CHAVEP : ' A-FD-ARQUIVO-CHAVEP
' CHAVES1 : ' A-FD-ARQUIVO-CHAVES1
' CHAVES2 : ' A-FD-ARQUIVO-CHAVES2
ADD 1 TO LL-ARQUIVO
WHEN '10'
DISPLAY '
FS=' FS-ARQUIVO ' READ EOF'
MOVE 'SIM' TO EOF-ARQUIVO
MOVE 'SIM' TO STOP-ARQUIVO
WHEN OTHER
DISPLAY '
FS=' FS-ARQUIVO ' READ ERRO'
MOVE 'SIM' TO STOP-ARQUIVO
END-EVALUATE
CONTINUE.
SAI-LERSEQS. EXIT.
//GO.SYSPRINT DD SYSOUT=*
//GO.ARQUIVO
DD DSN=DSVAABVS.LSG.A002.ALBERTO.PATH.AIX2,DISP=SHR
121
00091
00090
00089
00088
00087
00086
00085
00084
00083
00082
00081
00080
00200
00199
00198
00197
00196
00195
00194
00193
00192
00191
00190
00100
00099
00098
00097
00096
00095
00094
00093
00092
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
CHAVES2
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
00000
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
90091
90092
90093
90094
90095
90096
90097
90098
90099
90100
90101
99991
99992
99993
99994
99995
99996
99997
99998
99999
FS=00 CLOSE OK
-----------------------------------------------LIDOS ARQUIVO : 00032
------------------------------------------------
122
Conceito : leitura de faixa de registros : desde registro cuja chave tem determinado valor at
registro cuja chave tenha outro determinado valor;
Por exemplo : desde registro com chave 30000 at registro com chave 59999. Portanto, a chave
30000 indica o incio da faixa de registros a considerar e a chave 59999 indica o final da faixa, ou
seja : registros com chave < 30000 devem ser pulados, registros com chaves entre 30000 (inclusive)
e 59999 (inclusive) devem ser processados e registros com chave maior que 59999 no devem ser
processados.
Neste caso o aplicativo deve :
(a) comandar o posicionamento no ponto do arquivo em que houver registro com chave igual ou
maior chave que caracteriza o incio da faixa de registros desejada
(b) efetuar lao de leitura sequencial dos registros at que a chave do registro lido esteja fora da
faixa desejada (chave maior que a que determina o fim da faixa) ou a condio de fim de arquivo
(EOF) seja detectada
SELECT nome_arquivo
ORGANIZATION IS INDEXED
ACCESS IS DYNAMIC
FILE STATUS IS variavel_wss
RECORD KEY IS chave_primaria
DDs
Procedimentos :
Abrir o arquivo com OPEN INPUT nome_arquivo e testar o file status
File Status = 00 : OK
File Status 00 : erro
Posicionar o arquivo no primeiro registro da faixa desejada usando o comando
START nome_arquivo KEY operador_relacional
rea_chave_primria_fd
e testar o file status
O operador relacional do START pode ser um dos seguintes :
GREATER ou > ou EQUAL ou = ou NOT LESS ou NOT <
Ele NO aceita NENHUMA OUTRA especificao !
O file status deve ser testado com :
File Status = 00 : START OK. Posicionamento feito (mas registro no lido!)
File Status = 10 : EOF (fim de arquivo)
File Status outros : (outro) erro no START
IMPORTANTE : o posicionamento, feito atravs da instruo START , NO L nenhum
registro, apenas deixa um ponteiro indicando que o prximo READ deve ler na posio do
arquivo marcada.
Ler sequencialmente os registros a partir daquele posicionado pelo START usando
READ rea_fd NEXT e testar o file status
//ddname
DD
DISP=SHR,DSN=dsname_cluster
123
124
*----------------------------------------------------------------WORKING-STORAGE SECTION.
*
01 FS-ARQUIVO
PIC X(02).
01 EOF-ARQUIVO
PIC X(03) VALUE 'NAO'.
01 STOP-ARQUIVO
PIC X(03) VALUE 'NAO'.
01 LL-ARQUIVO
PIC 9(5) VALUE ZERO.
01 FORA-DENTRO
PIC X(6) VALUE SPACES.
01 WW-CHAVEP
PIC 9(5) VALUE ZERO.
01 WW-CHAVES
PIC 9(5) VALUE ZERO.
01 WW-FORAFAIXA
PIC X(03) VALUE 'NAO'.
01 WW-CHAVE-INI-FAIXA PIC X(05) VALUE '00004'.
01 WW-CHAVE-FIM-FAIXA PIC X(05) VALUE '00010'.
*
*---------------------------------------------------------------PROCEDURE DIVISION.
*---------------------------------------------------------------PROGRAMA SECTION.
*
DISPLAY '------------------------------------------------'
DISPLAY 'LEITURA DE FAIXA DE REGISTROS POR CHAVE PRIMARIA'
DISPLAY '------------------------------------------------'
*
OPEN
INPUT ARQUIVO.
EVALUATE FS-ARQUIVO
WHEN '00'
DISPLAY '
FS=' FS-ARQUIVO ' OPEN OK'
WHEN OTHER
DISPLAY '
FS=' FS-ARQUIVO ' OPEN ERRO'
MOVE 'SIM' TO STOP-ARQUIVO
END-EVALUATE
*
IF STOP-ARQUIVO EQUAL 'NAO'
MOVE 'NAO' TO STOP-ARQUIVO
PERFORM POSICIONA
IF STOP-ARQUIVO EQUAL 'NAO'
PERFORM LERFAIXA UNTIL STOP-ARQUIVO = 'SIM'
END-IF
END-IF
*
CLOSE ARQUIVO.
EVALUATE FS-ARQUIVO
WHEN '00'
DISPLAY '
FS=' FS-ARQUIVO ' CLOSE OK'
WHEN OTHER
DISPLAY '
FS=' FS-ARQUIVO ' CLOSE ERRO'
END-EVALUATE
*
DISPLAY '------------------------------------------------'
DISPLAY 'LIDOS
ARQUIVO
= ' LL-ARQUIVO
DISPLAY '------------------------------------------------'
STOP RUN.
*
*---------------------------------------------------------------* POSICIONA NO REGISTRO COM CHAVE IGUAL OU MAIOR QUE A PEDIDA
* OBS. O REGISTRO NAO EH LIDO !!!
*---------------------------------------------------------------POSICIONA SECTION.
POSICIONA-MAS-NAO-LE.
125
126
FS=00 START OK
FS=00 READ NEXT OK CHAVEP :00004 CHAVES1:00097
FS=00 READ NEXT OK CHAVEP :00005 CHAVES1:00096
FS=00 READ NEXT OK CHAVEP :00006 CHAVES1:00095
FS=00 READ NEXT OK CHAVEP :00007 CHAVES1:00094
FS=00 READ NEXT OK CHAVEP :00008 CHAVES1:00093
FS=00 READ NEXT OK CHAVEP :00009 CHAVES1:00092
FS=00 READ NEXT OK CHAVEP :00010 CHAVES1:00091
FS=00 READ NEXT OK CHAVEP :00011 CHAVES1:00090
FS=00 CLOSE OK
-----------------------------------------------LIDOS
ARQUIVO
= 00008
------------------------------------------------
127
CHAVES2:99994
CHAVES2:99995
CHAVES2:99996
CHAVES2:99997
CHAVES2:99998
CHAVES2:99999
CHAVES2:00000
CHAVES2:00001
DENTRO
DENTRO
DENTRO
DENTRO
DENTRO
DENTRO
DENTRO
FORA
Conceito : leitura de faixa de registros : desde registro cuja chave tem determinado valor at
registro cuja chave tenha outro determinado valor; por exemplo : desde registro com chave 30000
at registro com chave 59999. Portanto, a chave 30000 indica o incio da faixa de registros a
considerar e a chave 59999 indica o final da faixa, ou seja : registros com chave < 30000 devem ser
pulados, registros com chaves entre 30000 (inclusive) e 59999 (inclusive) devem ser processados e
registros com chave maior que 59999 no devem ser processados.
Neste caso o aplicativo deve
(a) comandar o posicionamento no ponto do arquivo em que houver registro com chave igual ou
maior chave que caracteriza o incio da faixa de registros desejada
(b) efetuar lao de leitura sequencial dos registros at que a chave do registro lido esteja fora da
faixa desejada (chave maior que a que determina o fim da faixa) ou a condio de fim de arquivo
(EOF) seja detectada
SELECT nome_arquivo
ORGANIZATION IS INDEXED
ACCESS IS DYNAMIC
FILE STATUS IS variavel_wss
RECORD KEY IS chave_primaria
ALTERNATE RECORD KEY IS chave_alternada_1
DDs
Procedimentos :
Abrir o arquivo com OPEN INPUT nome_arquivo e testar o file status
File Status = 00 : OK
File Status 00 : erro
Posicionar o arquivo no primeiro registro da faixa desejada usando o comando
START nome_arquivo KEY relao rea_chave_primria_fd e testar o file status
O operador relacional do START pode ser um dos seguintes :
GREATER ou > ou EQUAL ou = ou NOT LESS ou NOT <
Ele NO aceita NENHUMA OUTRA especificao !
O file status deve ser testado com :
File Status = 00 : START OK. Posicionamento feito (mas registro no lido!)
File Status = 10 : EOF (fim de arquivo)
File Status outros : (outro) erro no START
//ddname
//ddname1
DD
DD
DISP=SHR,DSN=dsname_cluster
DISP=SHR,DSN=dsname_cluster.PATH.AIX1
128
129
05 A-FD-ARQUIVO-CHAVEP
PIC X(05).
05 A-FD-ARQUIVO-RESTO1
PIC X(10).
05 A-FD-ARQUIVO-CHAVES1
PIC X(05).
05 A-FD-ARQUIVO-RESTO2
PIC X(10).
05 A-FD-ARQUIVO-CHAVES2
PIC X(05).
05 A-FD-ARQUIVO-RESTO3
PIC X(10).
05 A-FD-ARQUIVO-RESTO4
PIC X(35).
*----------------------------------------------------------------WORKING-STORAGE SECTION.
01 FS-ARQUIVO
PIC X(02).
01 EOF-ARQUIVO
PIC X(03) VALUE 'NAO'.
01 STOP-ARQUIVO
PIC X(03) VALUE 'NAO'.
01 LL-ARQUIVO
PIC 9(5) VALUE ZERO.
01 FORA-DENTRO
PIC X(6) VALUE SPACES.
01 WW-CHAVEP
PIC 9(5) VALUE ZERO.
01 WW-CHAVES
PIC 9(5) VALUE ZERO.
01 WW-FORAFAIXA
PIC X(03) VALUE 'NAO'.
01 WW-CHAVE-INI-FAIXA PIC X(05) VALUE '00095'.
01 WW-CHAVE-FIM-FAIXA PIC X(05) VALUE '00104'.
*---------------------------------------------------------------PROCEDURE DIVISION.
*---------------------------------------------------------------PROGRAMA SECTION.
DISPLAY '------------------------------------------------'
DISPLAY 'LEITURA DE FAIXA DE REGISTROS POR CHAVE ALTERN 1'
DISPLAY '------------------------------------------------'
*
OPEN
INPUT ARQUIVO.
EVALUATE FS-ARQUIVO
WHEN '00'
DISPLAY '
FS=' FS-ARQUIVO ' OPEN OK'
WHEN OTHER
DISPLAY '
FS=' FS-ARQUIVO ' OPEN ERRO'
MOVE 'SIM' TO STOP-ARQUIVO
END-EVALUATE
*
IF STOP-ARQUIVO EQUAL 'NAO'
MOVE 'NAO' TO STOP-ARQUIVO
PERFORM POSICIONA
IF STOP-ARQUIVO EQUAL 'NAO'
PERFORM LERFAIXA UNTIL STOP-ARQUIVO = 'SIM'
END-IF
END-IF
*
CLOSE ARQUIVO.
EVALUATE FS-ARQUIVO
WHEN '00'
DISPLAY '
FS=' FS-ARQUIVO ' CLOSE OK'
WHEN OTHER
DISPLAY '
FS=' FS-ARQUIVO ' CLOSE ERRO'
END-EVALUATE
*
DISPLAY '------------------------------------------------'
DISPLAY 'LIDOS
ARQUIVO
= ' LL-ARQUIVO
DISPLAY '------------------------------------------------'
STOP RUN.
*---------------------------------------------------------------* POSICIONA NO REGISTRO COM CHAVE IGUAL OU MAIOR QUE A PEDIDA
* OBS. O REGISTRO NAO EH LIDO !!!
130
*---------------------------------------------------------------POSICIONA SECTION.
POSICIONA-MAS-NAO-LE.
MOVE WW-CHAVE-INI-FAIXA TO A-FD-ARQUIVO-CHAVES1
*
START ARQUIVO KEY NOT LESS
A-FD-ARQUIVO-CHAVES1
EVALUATE FS-ARQUIVO
WHEN '00'
DISPLAY '
FS=' FS-ARQUIVO ' START OK'
WHEN '10'
DISPLAY '
FS=' FS-ARQUIVO ' START EOF'
MOVE 'SIM' TO EOF-ARQUIVO
MOVE 'SIM' TO STOP-ARQUIVO
WHEN OTHER
DISPLAY '
FS=' FS-ARQUIVO ' START ERRO'
END-EVALUATE
*
CONTINUE.
SAI-POSICIONA. EXIT.
*---------------------------------------------------------------* LEITURA SEQUENCIAL ENTRE LIMITES
*---------------------------------------------------------------LERFAIXA SECTION.
*
* O PRIMEIRO READ LE O REGISTRO QUE FOI POSICIONADO PELO START
*
READ ARQUIVO NEXT
EVALUATE FS-ARQUIVO
WHEN '00'
ADD 1 TO LL-ARQUIVO
IF A-FD-ARQUIVO-CHAVES1 NOT GREATER WW-CHAVE-FIM-FAIXA
MOVE 'DENTRO' TO FORA-DENTRO
ELSE
MOVE 'FORA ' TO FORA-DENTRO
MOVE 'SIM' TO STOP-ARQUIVO
END-IF
DISPLAY '
FS=' FS-ARQUIVO ' READ NEXT OK'
' CHAVEP :' A-FD-ARQUIVO-CHAVEP
' CHAVES1:' A-FD-ARQUIVO-CHAVES1
' CHAVES2:' A-FD-ARQUIVO-CHAVES2
' ' FORA-DENTRO
WHEN '10'
DISPLAY '
FS=' FS-ARQUIVO ' READ NEXT EOF'
MOVE 'SIM' TO EOF-ARQUIVO
MOVE 'SIM' TO STOP-ARQUIVO
WHEN OTHER
DISPLAY '
FS=' FS-ARQUIVO ' READ NEXT ERRO'
MOVE 'SIM' TO STOP-ARQUIVO
END-EVALUATE
*
CONTINUE.
SAI-LERFAIXA. EXIT.
//GO.SYSPRINT DD SYSOUT=*
//GO.ARQUIVO
DD DSN=DSVAABVS.LSG.A002.ALBERTO,DISP=SHR
//GO.ARQUIVO1 DD DSN=DSVAABVS.LSG.A002.ALBERTO.PATH.AIX1,DISP=SHR
131
132
CHAVES2:99996
CHAVES2:99995
CHAVES2:99994
CHAVES2:99993
CHAVES2:99992
CHAVES2:99991
CHAVES2:90101
DENTRO
DENTRO
DENTRO
DENTRO
DENTRO
DENTRO
FORA
Conceito : leitura de faixa de registros : desde registro cuja chave tem determinado valor at
registro cuja chave tenha outro determinado valor;
Por exemplo : desde registro com chave 30000 at registro com chave 59999. Portanto, a chave
30000 indica o incio da faixa de registros a considerar e a chave 59999 indica o final da faixa, ou
seja : registros com chave < 30000 devem ser pulados, registros com chaves entre 30000 (inclusive)
e 59999 (inclusive) devem ser processados e registros com chave maior que 59999 no devem ser
processados.
Neste caso o aplicativo deve
(a) comandar o posicionamento no ponto do arquivo em que houver registro com chave igual ou
maior chave que caracteriza o incio da faixa de registros desejada
(b) efetuar lao de leitura sequencial dos registros at que a chave do registro lido esteja fora da
faixa desejada (chave maior que a que determina o fim da faixa) ou a condio de fim de arquivo
(EOF) seja detectada
SELECT nome_arquivo
ORGANIZATION IS INDEXED
ACCESS IS DYNAMIC
FILE STATUS IS variavel_wss
RECORD KEY IS chave_primaria
ALTERNATE RECORD KEY IS chave_alternada_1
ALTERNATE RECORD KEY IS chave_alternada_2
DDs
//ddname
//ddname1
//ddname2
...
//ddnamen
DD
DD
DD
DISP=SHR,DSN=dsname_cluster
DISP=SHR,DSN=dsname_cluster.PATH.AIX1
DISP=SHR,DSN=dsname_cluster.PATH.AIX2
DD
DISP=SHR,DSN=dsname_cluster.PATH.AIXn
//ddname
//ddname1
//ddname2
DD
DD
DD
DISP=SHR,DSN=dsname_cluster
DISP=SHR,DSN=dsname_cluster.PATH.AIX1
DISP=SHR,DSN=dsname_cluster.PATH.AIX2
ou
133
...
//ddnamen
DD
DISP=SHR,DSN=dsname_cluster.PATH.AIXn
Procedimentos :
Abrir o arquivo com OPEN INPUT nome_arquivo e testar o file status
File Status = 00 : OK
File Status 00 : erro
Posicionar o arquivo no primeiro registro da faixa desejada usando o comando
START nome_arquivo KEY relao rea_chave_primria_fd e testar o file status
O operador relacional do START pode ser um dos seguintes :
GREATER ou > ou EQUAL ou = ou NOT LESS ou NOT <
Ele NO aceita NENHUMA OUTRA especificao !
O file status deve ser testado com :
File Status = 00 : START OK. Posicionamento feito (mas registro no lido!)
File Status = 10 : EOF (fim de arquivo)
File Status outros : (outro) erro no START
IMPORTANTE : o posicionamento, feito atravs da instruo START , NO L nenhum
registro, apenas deixa um ponteiro indicando que o prximo READ deve ler na posio do
arquivo marcada.
Ler sequencialmente os registros a partir daquele posicionado pelo START usando
READ rea_fd NEXT e testar o file status
File Status = 00 : READ OK. Registro lido
File Status = 10 : EOF (fim de arquivo)
File Status outros : (outro) erro no READ
A determinao do fim da leitura sequencial deve ser feita baseada em 2 eventos : EOF (file
status 10) ou chave do registro lido maior que a chave indicadora de fim da faixa de registros
desejados. O controle desses eventos responsabilidade do aplicativo.
Fechar o arquivo com CLOSE nome_arquivo e testar file status :
File Status = 00 : OK
File Status 00 : erro
134
135
136
'
'
'
'
WHEN '10'
DISPLAY '
FS=' FS-ARQUIVO ' READ NEXT EOF'
MOVE 'SIM' TO EOF-ARQUIVO
MOVE 'SIM' TO STOP-ARQUIVO
WHEN OTHER
DISPLAY '
FS=' FS-ARQUIVO ' READ NEXT ERRO'
MOVE 'SIM' TO STOP-ARQUIVO
END-EVALUATE
*
CONTINUE.
SAI-LERFAIXA. EXIT.
//GO.SYSPRINT DD SYSOUT=*
//GO.ARQUIVO
DD DSN=DSVAABVS.LSG.A002.ALBERTO,DISP=SHR
//GO.ARQUIVO1 DD DSN=DSVAABVS.LSG.A002.ALBERTO.PATH.AIX1,DISP=SHR
//GO.ARQUIVO2 DD DSN=DSVAABVS.LSG.A002.ALBERTO.PATH.AIX2,DISP=SHR
137
CHAVES2:90095
CHAVES2:90096
CHAVES2:90097
CHAVES2:90098
CHAVES2:90099
CHAVES2:90100
CHAVES2:90101
CHAVES2:99991
CHAVES2:99992
CHAVES2:99993
CHAVES2:99994
CHAVES2:99995
DENTRO
DENTRO
DENTRO
DENTRO
DENTRO
DENTRO
DENTRO
DENTRO
DENTRO
DENTRO
DENTRO
FORA
Conceito : leitura de um registro de forma direta (sem ler os anteriores) ; o acesso possvel pois
fornecido um argumento (valor de um campo chave) , o qual consultado nos ndices mantidos
pelo mtodo de acesso, e que tem pointers para sua localizao na rea de dados;
SELECT nome_arquivo
ORGANIZATION IS INDEXED
ACCESS IS RANDOM
FILE STATUS IS variavel_wss
RECORD KEY IS chave_primaria
DDs
Procedimentos :
Abrir o arquivo com OPEN INPUT nome_arquivo e testar o file status
File Status = 00 : OK
File Status 00 : erro
Mover o valor da chave que identifica o registro desejado para a rea da RECORD KEY na FILE
SECTION e em seguida dar o comando READ nome_arquivo e testar file status :
File Status = 00 : READ OK. Registro lido
File Status = 02 : READ OK chave duplicada (DUPKEY)
File Status = 23 : NOTFOUND : registro no achado
File Status outros : (outro) erro no READ
Fechar o arquivo com CLOSE nome_arquivo e testar file status :
File Status = 00 : OK
//ddname
DD
DISP=SHR,DSN=dsname_cluster
138
SELECT ARQUIVO
ASSIGN TO ARQUIVO
ORGANIZATION INDEXED
ACCESS RANDOM
RECORD KEY A-FD-ARQUIVO-CHAVEP
File Status FS-ARQUIVO.
*----------------------------------------------------------------DATA DIVISION.
FILE SECTION.
*----------------------------------------------------------------FD
ARQUIVO.
01
A-FD-ARQUIVO.
05 A-FD-ARQUIVO-CHAVEP
PIC X(05).
05 A-FD-ARQUIVO-RESTO1
PIC X(10).
05 A-FD-ARQUIVO-CHAVES1
PIC X(05).
05 A-FD-ARQUIVO-RESTO2
PIC X(10).
05 A-FD-ARQUIVO-CHAVES2
PIC X(05).
05 A-FD-ARQUIVO-RESTO3
PIC X(10).
05 A-FD-ARQUIVO-RESTO4
PIC X(35).
*----------------------------------------------------------------WORKING-STORAGE SECTION.
*
01 FS-ARQUIVO
PIC X(02).
01 EOF-ARQUIVO
PIC X(03) VALUE 'NAO'.
01 STOP-ARQUIVO
PIC X(03) VALUE 'NAO'.
01 LEU-ARQUIVO
PIC X(03) VALUE 'NAO'.
01 WW-ULTGRAVADO
PIC 9(5) VALUE ZERO.
01 WW-ARQUIVO
PIC 9(5) VALUE ZERO.
01 WW-CHAVEP
PIC 9(5) VALUE ZERO.
01 WW-CHAVES1
PIC 9(5) VALUE ZERO.
01 WW-CHAVES2
PIC 9(5) VALUE ZERO.
01 LL-ARQUIVO
PIC 9(5) VALUE ZERO.
*---------------------------------------------------------------PROCEDURE DIVISION.
*---------------------------------------------------------------PROGRAMA SECTION.
*
DISPLAY '------------------------------------------------'
DISPLAY 'READ DIRETO POR CHAVE PRIMARIA '
DISPLAY '------------------------------------------------'
*
OPEN INPUT
ARQUIVO.
EVALUATE FS-ARQUIVO
WHEN '00'
DISPLAY '
FS=' FS-ARQUIVO ' OPEN OK'
WHEN OTHER
DISPLAY '
FS=' FS-ARQUIVO ' OPEN ERRO'
MOVE 'SIM' TO STOP-ARQUIVO
END-EVALUATE
*
MOVE
'00005' TO WW-CHAVEP
PERFORM LER-DIRETO
MOVE
'00015' TO WW-CHAVEP
PERFORM LER-DIRETO
MOVE
'00025' TO WW-CHAVEP
PERFORM LER-DIRETO
MOVE
'00035' TO WW-CHAVEP
PERFORM LER-DIRETO
*
CLOSE ARQUIVO.
139
EVALUATE FS-ARQUIVO
WHEN '00'
DISPLAY '
FS=' FS-ARQUIVO ' CLOSE OK'
WHEN OTHER
DISPLAY '
FS=' FS-ARQUIVO ' CLOSE ERRO'
END-EVALUATE
*
DISPLAY '------------------------------------------------'
DISPLAY 'LIDOS ARQUIVO
= ' LL-ARQUIVO
DISPLAY '------------------------------------------------'
STOP RUN.
*---------------------------------------------------------------* (TENTA) LER UM REGISTRO
*---------------------------------------------------------------LER-DIRETO SECTION.
*
MOVE
'NAO'
TO LEU-ARQUIVO
MOVE
WW-CHAVEP
TO A-FD-ARQUIVO-CHAVEP
READ
ARQUIVO
EVALUATE FS-ARQUIVO
WHEN '00'
DISPLAY '
FS=' FS-ARQUIVO ' READ OK' ' REG '
' CHAVEP : ' A-FD-ARQUIVO-CHAVEP
' CHAVES1 : ' A-FD-ARQUIVO-CHAVES1
' CHAVES2 : ' A-FD-ARQUIVO-CHAVES2
MOVE
'SIM' TO LEU-ARQUIVO
ADD
1
TO LL-ARQUIVO
WHEN '02'
DISPLAY '
FS=' FS-ARQUIVO ' READ KEYDUP
' WW-CHAVEP
WHEN '23'
DISPLAY '
FS=' FS-ARQUIVO ' READ NOTFOUND ' WW-CHAVEP
WHEN OTHER
DISPLAY '
FS=' FS-ARQUIVO ' READ ERRO
' WW-CHAVEP
END-EVALUATE
*
CONTINUE.
SAI-LER-DIRETO. EXIT.
*
//GO.SYSPRINT DD SYSOUT=*
//GO.ARQUIVO
DD DSN=DSVAABVS.LSG.A002.ALBERTO,DISP=SHR
140
CHAVES2 : 99995
CHAVES2 : 00005
Conceito : leitura de um registro de forma direta (sem ler os anteriores) ; o acesso possvel pois
fornecido um argumento (valor de um campo chave) , o qual consultado nos ndices mantidos
pelo mtodo de acesso, e que tem pointers para sua localizao na rea de dados;
SELECT nome_arquivo
ORGANIZATION IS INDEXED
ACCESS IS RANDOM
FILE STATUS IS variavel_wss
RECORD KEY IS chave_alternada_1
DDs
Procedimentos :
Abrir o arquivo com OPEN INPUT nome_arquivo e testar o file status
File Status = 00 : OK
File Status 00 : erro
Mover o valor da chave que identifica o registro desejado para a rea indicada como RECORD
KEY na FILE SECTION e em seguida comandar a leitura com o comando READ nome_arquivo
e testar file status :
File Status = 00 : READ OK. Registro lido
File Status = 02 : READ OK chave duplicada
File Status = 23 : registro no achado
File Status outros : (outro) erro no READ
Fechar o arquivo com CLOSE nome_arquivo e testar file status :
File Status = 00 : OK
File Status 00 : erro
//ddname
DD
DISP=SHR,DSN=dsname_cluster.PATH.AIX1
141
142
CLOSE ARQUIVO.
EVALUATE FS-ARQUIVO
WHEN '00'
DISPLAY '
FS=' FS-ARQUIVO ' CLOSE OK'
WHEN OTHER
DISPLAY '
FS=' FS-ARQUIVO ' CLOSE ERRO'
END-EVALUATE
*
DISPLAY '------------------------------------------------'
DISPLAY 'LIDOS ARQUIVO
= ' LL-ARQUIVO
DISPLAY '------------------------------------------------'
STOP RUN.
*---------------------------------------------------------------* (TENTA) LER UM REGISTRO
*---------------------------------------------------------------LER-DIRETO SECTION.
*
MOVE
'NAO'
TO LEU-ARQUIVO
MOVE
WW-CHAVES1
TO A-FD-ARQUIVO-CHAVES1
READ
ARQUIVO
EVALUATE FS-ARQUIVO
WHEN '00'
DISPLAY '
FS=' FS-ARQUIVO ' READ OK' ' REG '
' CHAVEP : ' A-FD-ARQUIVO-CHAVEP
' CHAVES1 : ' A-FD-ARQUIVO-CHAVES1
' CHAVES2 : ' A-FD-ARQUIVO-CHAVES2
MOVE
'SIM' TO LEU-ARQUIVO
WHEN '02'
DISPLAY '
FS=' FS-ARQUIVO ' READ KEYDUP
' WW-CHAVES1
WHEN '23'
DISPLAY '
FS=' FS-ARQUIVO ' READ NOTFOUND ' WW-CHAVES1
WHEN OTHER
DISPLAY '
FS=' FS-ARQUIVO ' READ ERRO
' WW-CHAVES1
END-EVALUATE
*
CONTINUE.
SAI-LER-DIRETO. EXIT.
*
//GO.SYSPRINT DD SYSOUT=*
//GO.ARQUIVO
DD DSN=DSVAABVS.LSG.A002.ALBERTO.PATH.AIX1,DISP=SHR
143
CHAVES2 : 00011
CHAVES2 : 90101
Conceito : leitura de um registro de forma direta (sem ler os anteriores) ; o acesso possvel pois
fornecido um argumento (valor de um campo chave) , o qual consultado nos ndices mantidos
pelo mtodo de acesso, e que tem pointers para sua localizao na rea de dados;
SELECT nome_arquivo
ORGANIZATION IS INDEXED
ACCESS IS RANDOM
FILE STATUS IS variavel_wss
RECORD KEY IS chave_alternada_2
DDs
Procedimentos :
Abrir o arquivo com OPEN INPUT nome_arquivo e testar o file status
File Status = 00 : OK
File Status 00 : erro
Mover o valor da chave que identifica o registro desejado para a rea da ALTERNATE RECORD
KEY na FILE SECTION e em seguida comandar a leitura com o comando READ nome_arquivo
e testar file status :
File Status = 00 : READ OK. Registro lido
File Status = 02 : READ OK chave duplicada
File Status = 23 : registro no achado
File Status outros : (outro) erro no READ
Fechar o arquivo com CLOSE nome_arquivo e testar file status :
File Status = 00 : OK
//ddname
DD
DISP=SHR,DSN=dsname_cluster.PATH.AIX2
144
145
CLOSE ARQUIVO.
EVALUATE FS-ARQUIVO
WHEN '00'
DISPLAY '
FS=' FS-ARQUIVO ' CLOSE OK'
WHEN OTHER
DISPLAY '
FS=' FS-ARQUIVO ' CLOSE ERRO'
END-EVALUATE
*
DISPLAY '------------------------------------------------'
DISPLAY 'LIDOS ARQUIVO
= ' LL-ARQUIVO
DISPLAY '------------------------------------------------'
STOP RUN.
*---------------------------------------------------------------* (TENTA) LER UM REGISTRO
*---------------------------------------------------------------LER-DIRETO SECTION.
*
MOVE
'NAO'
TO LEU-ARQUIVO
MOVE
WW-CHAVES2
TO A-FD-ARQUIVO-CHAVES2
READ
ARQUIVO
EVALUATE FS-ARQUIVO
WHEN '00'
DISPLAY '
FS=' FS-ARQUIVO ' READ OK' ' REG '
' CHAVEP : ' A-FD-ARQUIVO-CHAVEP
' CHAVES1 : ' A-FD-ARQUIVO-CHAVES1
' CHAVES2 : ' A-FD-ARQUIVO-CHAVES2
ADD
1 TO LL-ARQUIVO
MOVE
'SIM' TO LEU-ARQUIVO
WHEN '02'
DISPLAY '
FS=' FS-ARQUIVO ' READ KEYDUP
' WW-CHAVES2
WHEN '23'
DISPLAY '
FS=' FS-ARQUIVO ' READ NOTFOUND ' WW-CHAVES2
WHEN OTHER
DISPLAY '
FS=' FS-ARQUIVO ' READ ERRO
' WW-CHAVES2
END-EVALUATE
*
CONTINUE.
SAI-LER-DIRETO. EXIT.
*
//GO.SYSPRINT DD SYSOUT=*
//GO.ARQUIVO
DD DSN=DSVAABVS.LSG.A002.ALBERTO.PATH.AIX2,DISP=SHR
146
CHAVES2 : 00011
CHAVES2 : 90091
CHAVES2 : 99991
147
Conceito : leitura de um registro de forma direta (sem ler os anteriores) ; o acesso possvel pois
fornecido um argumento (valor de um campo chave) , o qual consultado nos ndices mantidos
pelo mtodo de acesso, e que tem pointers para sua localizao na rea de dados;
SELECT nome_arquivo
ORGANIZATION IS INDEXED
ACCESS IS RANDOM
FILE STATUS IS variavel_wss
RECORD KEY IS chave_primaria
DDs
Procedimentos :
Abrir o arquivo com OPEN I-O nome_arquivo e testar o file status
File Status = 00 : OK
File Status 00 : erro
Mover o valor da chave que identifica o registro desejado para a rea de RECORD KEY na FILE
SECTION e em seguida dar o comando READ nome_arquivo e testar file status :
File Status = 00 : READ OK. Registro lido
File Status = 23 : registro no achado
File Status outros : (outro) erro no READ
Comandar o DELETE para deletar o registro : DELETE nome_arquivo e testar file status :
File Status = 00 : DELETE OK. Registro deletado
File Status = 23 : NOTFOUND. Registro no achado
File Status outros : (outro) erro no DELETE
Fechar o arquivo com CLOSE nome_arquivo e testar file status :
File Status = 00 : OK
File Status 00 : erro
//ddname
DD
DISP=SHR,DSN=dsname_cluster
148
FILE-CONTROL.
*----------------------------------------------------------------* ARQUIVO
*----------------------------------------------------------------SELECT ARQUIVO ASSIGN TO ARQUIVO
ORGANIZATION INDEXED
ACCESS RANDOM
RECORD KEY A-FD-ARQUIVO-CHAVEP
File Status FS-ARQUIVO.
*----------------------------------------------------------------DATA DIVISION.
FILE SECTION.
*----------------------------------------------------------------FD
ARQUIVO.
01
A-FD-ARQUIVO.
05 A-FD-ARQUIVO-CHAVEP
PIC X(05).
05 A-FD-ARQUIVO-RESTO1
PIC X(10).
05 A-FD-ARQUIVO-CHAVES1
PIC X(05).
05 A-FD-ARQUIVO-RESTO2
PIC X(10).
05 A-FD-ARQUIVO-CHAVES2
PIC X(05).
05 A-FD-ARQUIVO-RESTO3
PIC X(10).
05 A-FD-ARQUIVO-RESTO4
PIC X(35).
*----------------------------------------------------------------WORKING-STORAGE SECTION.
*
01 FS-ARQUIVO
PIC X(02).
01 EOF-ARQUIVO
PIC X(03) VALUE 'NAO'.
01 STOP-ARQUIVO
PIC X(03) VALUE 'NAO'.
01 LEU-ARQUIVO
PIC X(03) VALUE 'NAO'.
01 WW-ULTGRAVADO
PIC 9(5) VALUE ZERO.
01 WW-ARQUIVO
PIC 9(5) VALUE ZERO.
01 WW-CHAVEP
PIC X(5) VALUE SPACES.
01 WW-CHAVES1
PIC X(5) VALUE SPACES.
01 WW-CHAVES2
PIC X(5) VALUE SPACES.
01 LL-ARQUIVO
PIC 9(5) VALUE ZERO.
01 DD-ARQUIVO
PIC 9(5) VALUE ZERO.
*---------------------------------------------------------------PROCEDURE DIVISION.
*---------------------------------------------------------------PROGRAMA SECTION.
*
DISPLAY '------------------------------------------------'
DISPLAY 'DELETE POR CHAVE PRIMARIA APOS READ DIRETO'
DISPLAY '------------------------------------------------'
*
OPEN I-O
ARQUIVO.
EVALUATE FS-ARQUIVO
WHEN '00'
DISPLAY '
FS=' FS-ARQUIVO ' OPEN OK'
WHEN OTHER
DISPLAY '
FS=' FS-ARQUIVO ' OPEN ERRO'
MOVE 'SIM' TO STOP-ARQUIVO
END-EVALUATE
*
MOVE
'00005' TO WW-CHAVEP
PERFORM LER-DIRETO
IF
LEU-ARQUIVO = 'SIM'
PERFORM DELETAR
END-IF
149
MOVE
'00015' TO WW-CHAVEP
PERFORM LER-DIRETO
IF
LEU-ARQUIVO = 'SIM'
PERFORM DELETAR
END-IF
*
CLOSE ARQUIVO.
EVALUATE FS-ARQUIVO
WHEN '00'
DISPLAY '
FS=' FS-ARQUIVO ' CLOSE OK'
WHEN OTHER
DISPLAY '
FS=' FS-ARQUIVO ' CLOSE ERRO'
END-EVALUATE
*
DISPLAY '------------------------------------------------'
DISPLAY 'LIDOS ARQUIVO
= ' LL-ARQUIVO
DISPLAY 'DELETADOS ARQ.
= ' DD-ARQUIVO
DISPLAY '------------------------------------------------'
STOP RUN.
*---------------------------------------------------------------* (TENTA) LER UM REGISTRO
*---------------------------------------------------------------LER-DIRETO SECTION.
*
MOVE
'NAO'
TO LEU-ARQUIVO
MOVE
WW-CHAVEP
TO A-FD-ARQUIVO-CHAVEP
READ
ARQUIVO
EVALUATE FS-ARQUIVO
WHEN '00'
MOVE
A-FD-ARQUIVO-CHAVEP
TO WW-CHAVEP
MOVE
A-FD-ARQUIVO-CHAVES1 TO WW-CHAVES1
MOVE
A-FD-ARQUIVO-CHAVES2 TO WW-CHAVES2
DISPLAY '
FS=' FS-ARQUIVO ' READ OK
'
' CHAVEP : ' A-FD-ARQUIVO-CHAVEP
' CHAVES1 : ' A-FD-ARQUIVO-CHAVES1
' CHAVES2 : ' A-FD-ARQUIVO-CHAVES2
MOVE
'SIM' TO LEU-ARQUIVO
ADD
1
TO LL-ARQUIVO
WHEN '02'
DISPLAY '
FS=' FS-ARQUIVO ' READ KEYDUP
' WW-CHAVEP
WHEN '23'
DISPLAY '
FS=' FS-ARQUIVO ' READ NOTFOUND ' WW-CHAVEP
WHEN OTHER
DISPLAY '
FS=' FS-ARQUIVO ' READ ERRO
' WW-CHAVEP
END-EVALUATE
*
CONTINUE.
SAI-LER-DIRETO. EXIT.
*---------------------------------------------------------------* DELETA REGISTRO LIDO
*---------------------------------------------------------------DELETAR SECTION.
*
DELETE ARQUIVO
EVALUATE FS-ARQUIVO
WHEN '00'
DISPLAY '
FS=' FS-ARQUIVO ' DELETE OK
'
' CHAVEP : ' WW-CHAVEP
' CHAVES1 : ' WW-CHAVES1
150
'
ADD
1
WHEN '23'
DISPLAY '
'
'
'
WHEN OTHER
DISPLAY '
'
'
'
END-EVALUATE
'
*
CONTINUE.
SAI-DELETAR. EXIT.
//GO.SYSPRINT DD SYSOUT=*
//GO.ARQUIVO
DD DSN=DSVAABVS.LSG.A002.ALBERTO,DISP=SHR
PRIMARIA ***********
CHAVE-S2=99991 R1=@UR1
CHAVE-S2=99992 R1=@UR1
CHAVE-S2=99993 R1=@UR1
CHAVE-S2=99994 R1=@UR1
CHAVE-S2=99996 R1=@UR1
CHAVE-S2=99997 R1=*CR1
CHAVE-S2=99998 R1=*CR1
CHAVE-S2=99999 R1=*CR1
CHAVE-S2=00000 R1=*CR1
CHAVE-S2=00001 R1=#UR1
CHAVE-S2=00002 R1=#UR1
CHAVE-S2=00003 R1=#UR1
CHAVE-S2=00004 R1=#UR1
CHAVE-S2=00006 R1=$UR1
CHAVE-S2=00007 R1=$UR1
CHAVE-S2=00008 R1=$UR1
CHAVE-S2=00009 R1=$UR1
CHAVE-S2=00010 R1=$UR1
151
R2=@UR2
R2=@UR2
R2=@UR2
R2=@UR2
R2=@UR2
R2=*CR2
R2=*CR2
R2=*CR2
R2=*CR2
R2=#UR2
R2=#UR2
R2=#UR2
R2=#UR2
R2=$UR2
R2=$UR2
R2=$UR2
R2=$UR2
R2=$UR2
CHAVE-PRI=00021
CHAVE-PRI=00501
CHAVE-PRI=00502
CHAVE-PRI=00503
CHAVE-PRI=00504
CHAVE-PRI=00505
CHAVE-PRI=00506
CHAVE-PRI=00507
CHAVE-PRI=00508
CHAVE-PRI=00509
CHAVE-PRI=00510
CHAVE-PRI=00511
CHAVE-S1=00080
CHAVE-S1=00200
CHAVE-S1=00199
CHAVE-S1=00198
CHAVE-S1=00197
CHAVE-S1=00196
CHAVE-S1=00195
CHAVE-S1=00194
CHAVE-S1=00193
CHAVE-S1=00192
CHAVE-S1=00191
CHAVE-S1=00190
CHAVE-S2=00011
CHAVE-S2=90091
CHAVE-S2=90092
CHAVE-S2=90093
CHAVE-S2=90094
CHAVE-S2=90095
CHAVE-S2=90096
CHAVE-S2=90097
CHAVE-S2=90098
CHAVE-S2=90099
CHAVE-S2=90100
CHAVE-S2=90101
R1=*CR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R2=*CR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=*CR2
R2=$UR2
R2=$UR2
R2=$UR2
R2=$UR2
R2=$UR2
R2=#UR2
R2=#UR2
R2=#UR2
R2=#UR2
R2=*CR2
R2=*CR2
R2=*CR2
R2=*CR2
R2=@UR2
R2=@UR2
R2=@UR2
R2=@UR2
R2=@UR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
ALTERN 2 ***********
CHAVE-S2=00000 R1=*CR1
CHAVE-S2=00001 R1=#UR1
CHAVE-S2=00002 R1=#UR1
CHAVE-S2=00003 R1=#UR1
CHAVE-S2=00004 R1=#UR1
CHAVE-S2=00006 R1=$UR1
152
R2=*CR2
R2=#UR2
R2=#UR2
R2=#UR2
R2=#UR2
R2=$UR2
CHAVE-PRI=00017
CHAVE-PRI=00018
CHAVE-PRI=00019
CHAVE-PRI=00020
CHAVE-PRI=00021
CHAVE-PRI=00501
CHAVE-PRI=00502
CHAVE-PRI=00503
CHAVE-PRI=00504
CHAVE-PRI=00505
CHAVE-PRI=00506
CHAVE-PRI=00507
CHAVE-PRI=00508
CHAVE-PRI=00509
CHAVE-PRI=00510
CHAVE-PRI=00511
CHAVE-PRI=00001
CHAVE-PRI=00002
CHAVE-PRI=00003
CHAVE-PRI=00004
CHAVE-PRI=00006
CHAVE-PRI=00007
CHAVE-PRI=00008
CHAVE-PRI=00009
CHAVE-S1=00084
CHAVE-S1=00083
CHAVE-S1=00082
CHAVE-S1=00081
CHAVE-S1=00080
CHAVE-S1=00200
CHAVE-S1=00199
CHAVE-S1=00198
CHAVE-S1=00197
CHAVE-S1=00196
CHAVE-S1=00195
CHAVE-S1=00194
CHAVE-S1=00193
CHAVE-S1=00192
CHAVE-S1=00191
CHAVE-S1=00190
CHAVE-S1=00100
CHAVE-S1=00099
CHAVE-S1=00098
CHAVE-S1=00097
CHAVE-S1=00095
CHAVE-S1=00094
CHAVE-S1=00093
CHAVE-S1=00092
CHAVE-S2=00007
CHAVE-S2=00008
CHAVE-S2=00009
CHAVE-S2=00010
CHAVE-S2=00011
CHAVE-S2=90091
CHAVE-S2=90092
CHAVE-S2=90093
CHAVE-S2=90094
CHAVE-S2=90095
CHAVE-S2=90096
CHAVE-S2=90097
CHAVE-S2=90098
CHAVE-S2=90099
CHAVE-S2=90100
CHAVE-S2=90101
CHAVE-S2=99991
CHAVE-S2=99992
CHAVE-S2=99993
CHAVE-S2=99994
CHAVE-S2=99996
CHAVE-S2=99997
CHAVE-S2=99998
CHAVE-S2=99999
R1=$UR1
R1=$UR1
R1=$UR1
R1=$UR1
R1=*CR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=@UR1
R1=@UR1
R1=@UR1
R1=@UR1
R1=@UR1
R1=*CR1
R1=*CR1
R1=*CR1
153
R2=$UR2
R2=$UR2
R2=$UR2
R2=$UR2
R2=*CR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=@UR2
R2=@UR2
R2=@UR2
R2=@UR2
R2=@UR2
R2=*CR2
R2=*CR2
R2=*CR2
Conceito : leitura de um registro de forma direta (sem ler os anteriores) ; o acesso possvel pois fornecido um
argumento (valor de um campo chave) , o qual consultado nos ndices mantidos pelo mtodo de acesso, e que tem
pointers para sua localizao na rea de dados;
SELECT nome_arquivo
ORGANIZATION IS INDEXED
ACCESS IS RANDOM
FILE STATUS IS variavel_wss
RECORD KEY IS chave_alternada_1
DDs
Procedimentos :
Abrir o arquivo com OPEN INPUT nome_arquivo e testar o file status
File Status = 00 : OK
File Status 00 : erro
Mover o valor da chave que identifica o registro desejado para a rea da ALTERNATE RECORD
KEY na FILE SECTION e em seguida efetuar a leitura com o comando READ nome_arquivo e
testar file status :
File Status = 00 : READ OK. Registro lido
File Status = 02 : READ OK chave duplicada
File Status = 23 : registro no achado
File Status outros : (outro) erro no READ
Fechar o arquivo com CLOSE nome_arquivo e testar file status :
File Status = 00 : OK
File Status 00 : erro
//ddname
DD
DISP=SHR,DSN=dsname_cluster.PATH.AIX1
154
155
END-IF
*
CLOSE ARQUIVO.
EVALUATE FS-ARQUIVO
WHEN '00'
DISPLAY '
FS=' FS-ARQUIVO ' CLOSE OK'
WHEN OTHER
DISPLAY '
FS=' FS-ARQUIVO ' CLOSE ERRO'
END-EVALUATE
*
DISPLAY '------------------------------------------------'
DISPLAY 'LIDOS ARQUIVO
= ' LL-ARQUIVO
DISPLAY 'DELETADOS ARQ.
= ' DD-ARQUIVO
DISPLAY '------------------------------------------------'
STOP RUN.
*---------------------------------------------------------------* (TENTA) LER UM REGISTRO
*---------------------------------------------------------------LER-DIRETO SECTION.
*
MOVE
'NAO'
TO LEU-ARQUIVO
MOVE
WW-CHAVES1
TO A-FD-ARQUIVO-CHAVES1
READ
ARQUIVO
EVALUATE FS-ARQUIVO
WHEN '00'
MOVE
A-FD-ARQUIVO-CHAVEP
TO WW-CHAVEP
MOVE
A-FD-ARQUIVO-CHAVES1 TO WW-CHAVES1
MOVE
A-FD-ARQUIVO-CHAVES2 TO WW-CHAVES2
DISPLAY '
FS=' FS-ARQUIVO ' READ OK
'
' CHAVEP : ' A-FD-ARQUIVO-CHAVEP
' CHAVES1 : ' A-FD-ARQUIVO-CHAVES1
' CHAVES2 : ' A-FD-ARQUIVO-CHAVES2
MOVE
'SIM' TO LEU-ARQUIVO
ADD
1
TO LL-ARQUIVO
WHEN '02'
DISPLAY '
FS=' FS-ARQUIVO ' READ KEYDUP
' WW-CHAVEP
WHEN '23'
DISPLAY '
FS=' FS-ARQUIVO ' READ NOTFOUND ' WW-CHAVEP
WHEN OTHER
DISPLAY '
FS=' FS-ARQUIVO ' READ ERRO
' WW-CHAVEP
END-EVALUATE
*
CONTINUE.
SAI-LER-DIRETO. EXIT.
*---------------------------------------------------------------* DELETA REGISTRO LIDO
*---------------------------------------------------------------DELETAR SECTION.
DELETE ARQUIVO
EVALUATE FS-ARQUIVO
WHEN '00'
DISPLAY '
FS=' FS-ARQUIVO ' DELETE OK
'
' CHAVEP : ' WW-CHAVEP
' CHAVES1 : ' WW-CHAVES1
' CHAVES2 : ' WW-CHAVES2
ADD
1
TO DD-ARQUIVO
WHEN '23'
DISPLAY '
FS=' FS-ARQUIVO ' DELETE NOTFOUND'
' CHAVEP : ' WW-CHAVEP
156
PRIMARIA ***********
CHAVE-S2=99991 R1=@UR1
CHAVE-S2=99992 R1=@UR1
CHAVE-S2=99993 R1=@UR1
CHAVE-S2=99994 R1=@UR1
CHAVE-S2=99997 R1=*CR1
CHAVE-S2=99998 R1=*CR1
CHAVE-S2=99999 R1=*CR1
CHAVE-S2=00000 R1=*CR1
CHAVE-S2=00001 R1=#UR1
CHAVE-S2=00002 R1=#UR1
CHAVE-S2=00003 R1=#UR1
CHAVE-S2=00004 R1=#UR1
CHAVE-S2=00007 R1=$UR1
CHAVE-S2=00008 R1=$UR1
CHAVE-S2=00009 R1=$UR1
CHAVE-S2=00010 R1=$UR1
CHAVE-S2=00011 R1=*CR1
CHAVE-S2=90091 R1=#IR1
CHAVE-S2=90092 R1=#IR1
CHAVE-S2=90093 R1=#IR1
CHAVE-S2=90094 R1=#IR1
CHAVE-S2=90095 R1=#IR1
CHAVE-S2=90096 R1=#IR1
CHAVE-S2=90097 R1=#IR1
CHAVE-S2=90098 R1=#IR1
157
R2=@UR2
R2=@UR2
R2=@UR2
R2=@UR2
R2=*CR2
R2=*CR2
R2=*CR2
R2=*CR2
R2=#UR2
R2=#UR2
R2=#UR2
R2=#UR2
R2=$UR2
R2=$UR2
R2=$UR2
R2=$UR2
R2=*CR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=*CR2
R2=$UR2
R2=$UR2
R2=$UR2
R2=$UR2
R2=#UR2
R2=#UR2
R2=#UR2
R2=#UR2
R2=*CR2
R2=*CR2
R2=*CR2
R2=*CR2
R2=@UR2
R2=@UR2
R2=@UR2
R2=@UR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
ALTERN 2 ***********
CHAVE-S2=00000 R1=*CR1
CHAVE-S2=00001 R1=#UR1
CHAVE-S2=00002 R1=#UR1
CHAVE-S2=00003 R1=#UR1
CHAVE-S2=00004 R1=#UR1
CHAVE-S2=00007 R1=$UR1
CHAVE-S2=00008 R1=$UR1
CHAVE-S2=00009 R1=$UR1
CHAVE-S2=00010 R1=$UR1
CHAVE-S2=00011 R1=*CR1
CHAVE-S2=90091 R1=#IR1
CHAVE-S2=90092 R1=#IR1
CHAVE-S2=90093 R1=#IR1
CHAVE-S2=90094 R1=#IR1
CHAVE-S2=90095 R1=#IR1
CHAVE-S2=90096 R1=#IR1
CHAVE-S2=90097 R1=#IR1
158
R2=*CR2
R2=#UR2
R2=#UR2
R2=#UR2
R2=#UR2
R2=$UR2
R2=$UR2
R2=$UR2
R2=$UR2
R2=*CR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
CHAVE-PRI=00508
CHAVE-PRI=00509
CHAVE-PRI=00510
CHAVE-PRI=00511
CHAVE-PRI=00001
CHAVE-PRI=00002
CHAVE-PRI=00003
CHAVE-PRI=00004
CHAVE-PRI=00007
CHAVE-PRI=00008
CHAVE-PRI=00009
CHAVE-S1=00193
CHAVE-S1=00192
CHAVE-S1=00191
CHAVE-S1=00190
CHAVE-S1=00100
CHAVE-S1=00099
CHAVE-S1=00098
CHAVE-S1=00097
CHAVE-S1=00094
CHAVE-S1=00093
CHAVE-S1=00092
CHAVE-S2=90098
CHAVE-S2=90099
CHAVE-S2=90100
CHAVE-S2=90101
CHAVE-S2=99991
CHAVE-S2=99992
CHAVE-S2=99993
CHAVE-S2=99994
CHAVE-S2=99997
CHAVE-S2=99998
CHAVE-S2=99999
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=@UR1
R1=@UR1
R1=@UR1
R1=@UR1
R1=*CR1
R1=*CR1
R1=*CR1
159
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=@UR2
R2=@UR2
R2=@UR2
R2=@UR2
R2=*CR2
R2=*CR2
R2=*CR2
Conceito : leitura de um registro de forma direta (sem ler os anteriores) ; o acesso possvel pois fornecido um
argumento (valor de um campo chave) , o qual consultado nos ndices mantidos pelo mtodo de acesso, e que tem
pointers para sua localizao na rea de dados;
SELECT nome_arquivo
ORGANIZATION IS INDEXED
ACCESS IS RANDOM
FILE STATUS IS variavel_wss
RECORD KEY IS chave_alternada_2
DDs
Procedimentos :
Abrir o arquivo com OPEN INPUT nome_arquivo e testar o file status
File Status = 00 : OK
File Status 00 : erro
Mover o valor da chave que identifica o registro desejado para a rea da ALTERNATE RECORD
KEY na FILE SECTION e em seguida efetuar a leitura com o comando READ nome_arquivo e
testar file status :
File Status = 00 : READ OK. Registro lido
File Status = 02 : READ OK chave duplicada
File Status = 23 : registro no achado
File Status outros : (outro) erro no READ
Fechar o arquivo com CLOSE nome_arquivo e testar file status :
File Status = 00 : OK
File Status 00 : erro
//ddname
DD
DISP=SHR,DSN=dsname_cluster.PATH.AIX2
160
161
PERFORM DELETAR
END-IF
*
CLOSE ARQUIVO.
EVALUATE FS-ARQUIVO
WHEN '00'
DISPLAY '
FS=' FS-ARQUIVO ' CLOSE OK'
WHEN OTHER
DISPLAY '
FS=' FS-ARQUIVO ' CLOSE ERRO'
END-EVALUATE
*
DISPLAY '------------------------------------------------'
DISPLAY 'LIDOS ARQUIVO
= ' LL-ARQUIVO
DISPLAY 'DELETADOS ARQ.
= ' DD-ARQUIVO
DISPLAY '------------------------------------------------'
STOP RUN.
*---------------------------------------------------------------* (TENTA) LER UM REGISTRO
*---------------------------------------------------------------LER-DIRETO SECTION.
*
MOVE
'NAO'
TO LEU-ARQUIVO
MOVE
WW-CHAVES2
TO A-FD-ARQUIVO-CHAVES2
READ
ARQUIVO
EVALUATE FS-ARQUIVO
WHEN '00'
MOVE
A-FD-ARQUIVO-CHAVEP
TO WW-CHAVEP
MOVE
A-FD-ARQUIVO-CHAVES1 TO WW-CHAVES1
MOVE
A-FD-ARQUIVO-CHAVES2 TO WW-CHAVES2
DISPLAY '
FS=' FS-ARQUIVO ' READ OK
'
' CHAVEP : ' A-FD-ARQUIVO-CHAVEP
' CHAVES1 : ' A-FD-ARQUIVO-CHAVES1
' CHAVES2 : ' A-FD-ARQUIVO-CHAVES2
MOVE
'SIM' TO LEU-ARQUIVO
ADD
1
TO LL-ARQUIVO
WHEN '02'
DISPLAY '
FS=' FS-ARQUIVO ' READ KEYDUP
' WW-CHAVEP
WHEN '23'
DISPLAY '
FS=' FS-ARQUIVO ' READ NOTFOUND ' WW-CHAVEP
WHEN OTHER
DISPLAY '
FS=' FS-ARQUIVO ' READ ERRO
' WW-CHAVEP
END-EVALUATE
*
CONTINUE.
SAI-LER-DIRETO. EXIT.
*---------------------------------------------------------------* DELETA REGISTRO LIDO
*---------------------------------------------------------------DELETAR SECTION.
*
DELETE ARQUIVO
EVALUATE FS-ARQUIVO
WHEN '00'
DISPLAY '
FS=' FS-ARQUIVO ' DELETE OK
'
' CHAVEP : ' WW-CHAVEP
' CHAVES1 : ' WW-CHAVES1
' CHAVES2 : ' WW-CHAVES2
ADD
1
TO DD-ARQUIVO
WHEN '23'
162
DISPLAY '
'
'
'
WHEN OTHER
DISPLAY '
'
'
'
END-EVALUATE
'
*
CONTINUE.
SAI-DELETAR. EXIT.
//GO.SYSPRINT DD SYSOUT=*
//GO.ARQUIVO
DD DSN=DSVAABVS.LSG.A002.ALBERTO.PATH.AIX2,DISP=SHR
PRIMARIA ***********
CHAVE-S2=99991 R1=@UR1
CHAVE-S2=99992 R1=@UR1
CHAVE-S2=99993 R1=@UR1
CHAVE-S2=99994 R1=@UR1
CHAVE-S2=99998 R1=*CR1
CHAVE-S2=99999 R1=*CR1
CHAVE-S2=00000 R1=*CR1
CHAVE-S2=00001 R1=#UR1
CHAVE-S2=00002 R1=#UR1
CHAVE-S2=00003 R1=#UR1
CHAVE-S2=00004 R1=#UR1
CHAVE-S2=00008 R1=$UR1
CHAVE-S2=00009 R1=$UR1
CHAVE-S2=00010 R1=$UR1
CHAVE-S2=00011 R1=*CR1
CHAVE-S2=90091 R1=#IR1
CHAVE-S2=90092 R1=#IR1
CHAVE-S2=90093 R1=#IR1
CHAVE-S2=90094 R1=#IR1
CHAVE-S2=90095 R1=#IR1
CHAVE-S2=90096 R1=#IR1
163
R2=@UR2
R2=@UR2
R2=@UR2
R2=@UR2
R2=*CR2
R2=*CR2
R2=*CR2
R2=#UR2
R2=#UR2
R2=#UR2
R2=#UR2
R2=$UR2
R2=$UR2
R2=$UR2
R2=*CR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
CHAVE-PRI=00507
CHAVE-PRI=00508
CHAVE-PRI=00509
CHAVE-PRI=00510
CHAVE-PRI=00511
CHAVE-S1=00194
CHAVE-S1=00193
CHAVE-S1=00192
CHAVE-S1=00191
CHAVE-S1=00190
CHAVE-S2=90097
CHAVE-S2=90098
CHAVE-S2=90099
CHAVE-S2=90100
CHAVE-S2=90101
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R1=#IR1
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=*CR2
R2=$UR2
R2=$UR2
R2=$UR2
R2=#UR2
R2=#UR2
R2=#UR2
R2=#UR2
R2=*CR2
R2=*CR2
R2=*CR2
R2=@UR2
R2=@UR2
R2=@UR2
R2=@UR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
164
R2=*CR2
R2=#UR2
R2=#UR2
R2=#UR2
R2=#UR2
R2=$UR2
R2=$UR2
R2=$UR2
R2=*CR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
R2=#IR2
CHAVE-PRI=00509
CHAVE-PRI=00510
CHAVE-PRI=00511
CHAVE-PRI=00001
CHAVE-PRI=00002
CHAVE-PRI=00003
CHAVE-PRI=00004
CHAVE-PRI=00008
CHAVE-PRI=00009
CHAVE-S1=00192
CHAVE-S1=00191
CHAVE-S1=00190
CHAVE-S1=00100
CHAVE-S1=00099
CHAVE-S1=00098
CHAVE-S1=00097
CHAVE-S1=00093
CHAVE-S1=00092
CHAVE-S2=90099
CHAVE-S2=90100
CHAVE-S2=90101
CHAVE-S2=99991
CHAVE-S2=99992
CHAVE-S2=99993
CHAVE-S2=99994
CHAVE-S2=99998
CHAVE-S2=99999
R1=#IR1
R1=#IR1
R1=#IR1
R1=@UR1
R1=@UR1
R1=@UR1
R1=@UR1
R1=*CR1
R1=*CR1
165
R2=#IR2
R2=#IR2
R2=#IR2
R2=@UR2
R2=@UR2
R2=@UR2
R2=@UR2
R2=*CR2
R2=*CR2
166
005500
DISPLAY 'OUT OF SPACE ON SEQUENTIAL FILE'
005600
WHEN '35' DISPLAY 'OPEN, FILE NOT PRESENT'
005700
WHEN '37' DISPLAY 'OPEN MODE INCOMPAT WITH DEVICE'
005800
WHEN '38' DISPLAY 'OPENING FILE CLOSED WITH LOCK'
005900
WHEN '39' DISPLAY 'OPEN, FILE ATTRIB CONFLICTING'
006000
WHEN '41' DISPLAY 'OPEN, FILE IS OPEN'
006100
WHEN '42' DISPLAY 'CLOSE, FILE IS CLOSED'
006200
WHEN '43' DISPLAY 'DELETE OR REWRITE & NO GOOD READ FIRST'
006300
WHEN '44' DISPLAY 'BOUNDARY VIOLATION/REWRITE REC TOO BIG'
006400
WHEN '46' DISPLAY 'SEQUENTIAL READ WITHOUT POSITIONING'
006500
WHEN '47' DISPLAY 'READING FILE NOT OPEN AS INPUT/IO/EXTEND'
006600
WHEN '48' DISPLAY 'WRITE WITHOUT OPEN IO'
006700
WHEN '49' DISPLAY 'DELETE OR REWRITE WITHOUT OPEN IO'
006800
WHEN '90' DISPLAY 'UNKNOWN'
006900
WHEN '91' DISPLAY 'VSAM - PASSWORD FAILURE'
007000
WHEN '92' DISPLAY 'LOGIC ERROR/OPENING AN OPEN FILE'
007100
DISPLAY 'OR READING OUTPUT FILE'
007200
DISPLAY 'OR WRITE INPUT FILE'
007300
DISPLAY 'OR DEL/REW BUT NO PRIOR READ'
007400
WHEN '93' DISPLAY 'VSAM - VIRTSTOR. RESOURCE NOT AVAILABLE'
007500
WHEN '94' DISPLAY 'VSAM - SEQUENTIAL READ AFTER END OF FILE'
007600
DISPLAY 'OR NO CURRENT REC POINTER FOR SEQ'
007700
WHEN '95' DISPLAY 'VSAM - INVALID FILE INFORMATION'
007800
DISPLAY 'OR OPEN OUTPUT (LOAD) '
007900
DISPLAY
'WITH FILE THAT NEVER CONTNED DATA'
008000
WHEN '96' DISPLAY 'VSAM - MISSING DD STATEMENT IN JCL'
008100
WHEN '97' DISPLAY 'VSAM - OPEN OK, FILE INTEGRITY VERIFIED'
008200
DISPLAY 'FILE SHOULD BE OK'
008300
WHEN OTHER DISPLAY 'UNKNOWN REASON' VSAM-STATUS-CODE
008400
END-EVALUATE.
008800
008900 EVALUATE-VSAM-EXTENDED-RETURN-CODE.
009000
EVALUATE VSAM-EXTENDED-RETURN-CODE
009100
WHEN 0 DISPLAY 'SUCCESSFUL COMPLETION'
009200
WHEN 4 DISPLAY 'ANOTHER REQUEST IS ACTIVE'
009300
WHEN 8 DISPLAY 'THERE IS A LOGICAL ERROR'
009400
PERFORM EVALUATE-LOGICAL-ERROR
009500
WHEN 12 DISPLAY 'THERE IS A PHYSICAL ERROR'
009600
PERFORM EVALUATE-PHYSICAL-ERROR
009700
WHEN OTHER DISPLAY 'UNKNOWN REASON'
009800
END-EVALUATE.
009900
010000 EVALUATE-VSAM-EXTENDED-FUNCTION-CODE.
010100
EVALUATE VSAM-EXTENDED-FUNCTION-CODE
010200
WHEN 0 DISPLAY 'ACCESSING BASE CLUSTER, NO PROBLEM'
010300
WHEN 1 DISPLAY 'ACCESSING BASE CLUSTER, MAY BE A PROBLEM'
010400
WHEN 2 DISPLAY 'ACCESSING ALTERNATE INDEX, NO PROBLEM'
010500
WHEN 3 DISPLAY 'ACCESSING ALTERNATE INDEX, MAY BE A PROBLEM'
010600
WHEN 4 DISPLAY 'UPGRADE PROCESSING, NO PROBLEM'
010700
WHEN 5 DISPLAY 'UPGRADE PROCESSING, MAY BE A PROBLEM'
010800
WHEN OTHER DISPLAY 'UNKNOWN REASON'
010900
END-EVALUATE.
011000
011100 EVALUATE-PHYSICAL-ERROR.
011200*
USE THIS WHEN THERE IS RC 12 IN VSAM-EXTENDED-RETURN-CODE
011300
EVALUATE VSAM-EXTENDED-FEEDBACK-CODE
011400
WHEN 4 DISPLAY 'READ ERROR ON DATA'
011500
WHEN 8 DISPLAY 'READ ERROR ON INDEX'
011600
WHEN 12 DISPLAY 'READ ERROR IN SEQUENCE SET'
167
011700
WHEN 16 DISPLAY 'WRITE ERROR ON DATA'
011800
WHEN 20 DISPLAY 'WRITE ERROR ON INDEX'
011900
WHEN 24 DISPLAY 'WRITE ERROR IN SEQUENCE SET'
012000
WHEN OTHER DISPLAY 'UNKNOWN REASON'
012100
END-EVALUATE.
012200
012300 EVALUATE-LOGICAL-ERROR.
012400*
USE THIS WHEN THERE IS RC 8 IN VSAM-EXTENDED-RETURN-CODE
012500
EVALUATE VSAM-EXTENDED-FEEDBACK-CODE
012600
WHEN
4 DISPLAY 'READ PAST END OF FILE'
012700
WHEN
8 DISPLAY 'DUPLICATE KEY'
012800
WHEN 12 DISPLAY 'KEY SEQUENCE ERROR'
012900
WHEN 16 DISPLAY 'NOT FOUND'
013000
WHEN 20 DISPLAY 'CONTROL INTERVAL IN USE BY OTHER JOB'
013100
WHEN 24 DISPLAY 'VOLUME CANNOT BE MOUNTED'
013200
WHEN 28 DISPLAY 'UNABLE TO EXTEND DATASET'
013300
WHEN 32 DISPLAY 'RBA NOT FOUND'
013400
WHEN 36 DISPLAY 'KEY IS NOT IN A DEFINED KEY RANGE'
013500
WHEN 40 DISPLAY 'INSUFFICIENT VIRTUAL STORAGE'
013600
WHEN 64 DISPLAY 'NO AVAILABLE STRINGS'
013700
WHEN 68 DISPLAY 'OPEN DID NOT SPECIFY PROC TYPE'
013800
WHEN 72 DISPLAY 'KEY ACCESS TO ESDS OR RRDS'
013900
WHEN 76 DISPLAY 'ATTEMPTED INSERT TO WRONG TYPE DATASET'
014000
WHEN 80 DISPLAY 'ATTEMPTED DELETE FROM ESDS'
014100
WHEN 84 DISPLAY 'OPTCD LOC FOR PUT REQUEST'
014200
WHEN 88 DISPLAY 'POSITION NOT ESTABLISHED'
014300
WHEN 92 DISPLAY 'PUT WITHOUT GET FOR UPDATE'
014400
WHEN 96 DISPLAY 'TRYING TO CHANGE PRIMARY KEY'
014500
WHEN 100 DISPLAY 'TRYING TO CHANGE LRECL'
014600
WHEN 104 DISPLAY 'INVALID RPL OPTIONS'
014700
WHEN 108 DISPLAY 'INVALID LRECL'
014800
WHEN 112 DISPLAY 'INVALID KEY LENGTH'
014900
WHEN 116 DISPLAY 'VIOLATED LOAD MODE RESTRICTION'
015000
WHEN 120 DISPLAY 'WRONG TASK SUBMITTING REQUEST'
015100
WHEN 132 DISPLAY 'TRYING TO GET SPANNED REC IN LOC MODE'
015200
WHEN 136 DISPLAY 'TRYING TO GET SPANNED REC BY ADDRESS'
015300
DISPLAY 'IN KSDS'
015400
WHEN 140 DISPLAY 'INCONSISTENT SPANNED REC'
015500
WHEN 144 DISPLAY 'ALT INDEX POINTER WITH NO MATCHING'
015600
DISPLAY 'BASE RECORD'
015700
WHEN 148 DISPLAY 'EXCEEDED MAX POINTERS IN ALT INDEX REC'
015800
WHEN 152 DISPLAY 'INSUFFICIENT BUFFERS AVAILABLE'
015900
WHEN 156 DISPLAY 'INVALID CONTROL INTERVAL'
016000
WHEN 192 DISPLAY 'INVALID RELATIVE REC NUMBER'
016100
WHEN 196 DISPLAY 'ATTEMPTED ADDRESSED REQUEST TO RRDS'
016200
WHEN 200 DISPLAY 'INVALID ACCESS THROUGH A PATH'
016300
WHEN 204 DISPLAY 'PUT IN BACKWARD MODE'
016400
WHEN 208 DISPLAY 'INVALID ENDREQ MACRO'
016500
WHEN OTHER DISPLAY 'UNKNOWN REASON'
016600
END-EVALUATE.
016700
168
SIGNIFICADO
'SUCCESSFUL COMPLETION'
'DUPLICATE KEY, NON UNIQ. ALT INDX'
'READ, WRONG LENGTH RECORD'
'OPEN, FILE NOT PRESENT'
'CLOSE OPTION INCOMPAT FILE DEVICE OPEN IMPLIES TAPE; TAPE NOT USED'
'END OF FILE'
'RRN > RELATIVE KEY DATA'
'INVALID KEY VSAM KSDS OR RRDS'
'SEQUENCE ERROR, ON WRITE OR CHANGING KEY ON REWRITE'
'DUPLICATE KEY'
'RECORD OR FILE NOT FOUND'
'BOUNDARY VIOLATION. WRITE PAST END OF KSDS RECORD. COBOL 370: REL: REC# TOO BIG. OUT
OF SPACE ON KSDS/RRDS FILE'
'PERMANENT DATA ERROR. DATA CHECK, PARITY CHK, HARDW'
'BOUNDARY VIOLATION. WRITE PAST END OF ESDS RECORD OR NO SPACE TO ADD KSDS/RRDS RECORD.
OUT OF SPACE ON SEQUENTIAL FILE'
'35' 'OPEN, FILE NOT PRESENT'
'OPEN MODE INCOMPAT WITH DEVICE'
'OPENING FILE CLOSED WITH LOCK'
'OPEN, FILE ATTRIB CONFLICTING'
'OPEN, FILE IS OPEN'
'CLOSE, FILE IS CLOSED'
'DELETE OR REWRITE & NO GOOD READ FIRST'
'BOUNDARY VIOLATION/REWRITE REC TOO BIG'
'SEQUENTIAL READ WITHOUT POSITIONING'
'READING FILE NOT OPEN AS INPUT/IO/EXTEND'
'WRITE WITHOUT OPEN IO'
'DELETE OR REWRITE WITHOUT OPEN IO'
'UNKNOWN'
'VSAM - PASSWORD FAILURE'
'LOGIC ERROR/OPENING AN OPEN FILE OR READING OUTPUT FILE OR WRITE INPUT FILE OR DEL/REW
BUT NO PRIOR READ '
'VSAM - VIRTSTOR. RESOURCE NOT AVAILABLE'
'VSAM - SEQUENTIAL READ AFTER END OF FILE OR NO CURRENT REC POINTER FOR SEQ'
'VSAM - INVALID FILE INFORMATION OR OPEN OUTPUT (LOAD) WITH FILE THAT NEVER CONTAINED
DATA'
'VSAM - MISSING DD STATEMENT IN JCL'
'VSAM - OPEN OK, FILE INTEGRITY VERIFIED FILE SHOULD BE OK'
'UNKNOWN REASON'
SIGNIFICADO
'SUCCESSFUL COMPLETION'
'ANOTHER REQUEST IS ACTIVE'
'THERE IS A LOGICAL ERROR'
'THERE IS A PHYSICAL ERROR'
'UNKNOWN REASON'
SIGNIFICADO
'ACCESSING BASE CLUSTER, NO PROBLEM'
'ACCESSING BASE CLUSTER, MAY BE A PROBLEM'
'ACCESSING ALTERNATE INDEX, NO PROBLEM'
'ACCESSING ALTERNATE INDEX, MAY BE A PROBLEM'
'UPGRADE PROCESSING, NO PROBLEM'
'UPGRADE PROCESSING, MAY BE A PROBLEM'
'UNKNOWN REASON'
169
SIGNIFICADO
'READ ERROR ON DATA'
'READ ERROR ON INDEX'
'READ ERROR IN SEQUENCE SET'
'WRITE ERROR ON DATA'
'WRITE ERROR ON INDEX'
'WRITE ERROR IN SEQUENCE SET'
'UNKNOWN REASON'
016(10)
020(14)
024(18)
028(1C)
036(24)
040(28)
044(2A)
064(40)
068(44)
074(4A)
076(4C)
080(50)
084(54)
088(58)
092(5C)
096(60)
100(64)
104(68)
108(6C)
112(70)
116(74)
120(78)
132(84)
136(88)
140(8C)
144(90)
148(94)
152(98)
156(9C)
192(C0)
196(C4)
200(C8)
204(CC)
252(FC)
Not enough Virtual-Storage Space is available for Work Areas, Control Blocks, or Buffers.
An uncorrectable I/O error occurred while VSAM was Reading or Writing a catalog record.
No record for the data set to be opened was found in the available catalog(s) or an unidentified
error occurred while VSAM was searching the catalog.
Security Verification failed; the password specified in the Access-Method Control Block for a
specified level of access does not match the password in the catalog for that level of access.
An uncorrectable I/O error occurred while VSAM was Reading the Volume Label.
The data set is not available for the type of processing you specify, or an attempt was made to
open a Reusable data set with the Reset option while another user had the data set.
An error occurred while VSAM was attempting to fix a page of Virtual storage in Real storage.
A VSAM catalog specified in JCL either does not exist or is not open, and no record for the data
set to be opened was found in any other catalog.
An uncorrectable I/O error occurred while VSAM was completing an I/O request.
The data set indicated by the Access-Method Control Block is not of the type that may be
specified by an Access-Method Control Block.
An unusable data set was opened for output.
Reset was specified for a nonreusable data set and the data set is not empty.
A permanent Staging error occurred in MSS (Acquire).
The Volume containing the Catalog Recovery area was not mounted and verified for output
processing.
171
APNDICES
APNDICE A - RELAO DE PALAVRAS RESERVADAS
ACCEPT
ACCESS
ACTUAL
ADD
ADDRESS
ADVANCING
AFTER
ALL
ALPHABET
ALPHABETIC
ALPHABETIC-LOWER
ALPHABETIC-UPPER
ALPHANUMERIC
ALPHANUMERIC-EDITED
ALSO
ALTER
ALTERNATE
AND
ANY
APPLY
ARE
AREA
AREAS
ASCENDING
ASSIGN
AT
AUTHOR
AUTO
AUTO-SKIP
AUTOMATIC
BACKGROUND-COLOR
BACKGROUND-COLOUR
BACKWARD
BASIS
BEEP
BEFORE
BEGINNING
BELL
BINARY
BLANK
BLINK
BLOCK
BOTTOM
BY
C01
C02
C03
C04
C05
C06
C07
C08
C09
C10
C11
C12
CALL
CANCEL
CBL
CD
CF
CH
CHAIN
CHIANING
CHANGED
CHARACTER
CHARACTERS
CLASS
CLOCK-UNITS
CLOSE
COBOL
CODE
CODE-SET
COL
COLLATING
COLUMN
COM-REG
COMMA
COMMIT
COMMON
COMMUNICATION
COMP
COMP-0
COMP-1
COMP-2
COMP-3
COMP-4
COMP-5
COMP-6
COMP-X
COMPUTATIONAL
COMPUTATIONAL-0
COMPUTATIONAL-1
COMPUTATIONAL-2
COMPUTATIONAL-3
COMPUTATIONAL-4
COMPUTATIONAL-5
COMPUTATIONAL-6
COMPUTATIONAL-X
COMPUTE
CONFIGURATION
CONSOLE
CONTAINS
CONTENT
CONTINUE
CONTROL
CONTROLS
CONVERT
CONVERTING
COPY
CORE-INDEX
CORR
172
CORRESPONDING
COUNT
CRT
CURRENCY
CURRENT-DATE
CURSOR
DATA
DATE
DATE-COMPILED
DATE-WRITTEN
DAY
DAY-OF-WEEK
DECS
DE
DEBUG
DEBUGGING
DECIMAL-POINT
DECLARATIVES
DELETE
DELIMITED
DELIMITER
DEPENDING
DESCENDING
DESTINATION
DETAIL
DISABLE
DISK
DISP
DISPLAY
DISPLAY-1
DISPLAY-ST
DIVIDE
DIVISION
DOWN
DUPLICATES
DYNAMIC
ECHO
EGCS
EGI
EJECT
ELSE
EMI
EMPTY-CHECK
ENABLE
END
END-ACCEPT
END-ADD
END-CALL
END-CHAIN
END-COMPUTE
END-DELETE
END-DIVIDE
END-EVALUATE
END-IF
END-MULTIPLY
END-OF-PAGE
END-PERFORM
END-READ
END-RECEIVE
END-RETURN
END-REWRITE
END-SEARCH
END-START
END-STRING
END-SUBTRACT
END-UNSTRING
END-WRITE
ENDING
ENTER
ENTRY
ENVIRONMENT
EOL
EOP
EOS
EQUAL
ERASE
ERROR
ESCAPE
ESI
EVALUATE
EVERY
EXAMINE
EXCEPTION
EXCESS-3
EXCLUSIVE
EXEC
EXECUTE
EXHIBIT
EXIT
EXTEND
EXTERNAL
FALSE
FD
FH--FCD
FH--KEYDEF
FILE
FILE-CONTROL
FILE-ID
FILE-LIMIT
FILE-LIMITS
FILLER
FINAL
FIRST
FIXED
FOOTING
FOR
FOREGROUND-COLOR
FOREGROUND-COLOUR
FROM
FULL
GENERATE
GIVING
GLOBAL
GO
GOBACK
GREATER
GRID
GROUP
HEADING
HIGH
HIGH-VALUE
HIGH-VALUES
HIGHLIGHT
I-O
I-O-CONTROL
ID
IDENTIFICATION
IF
IN
INDEX
INDEXED
INDICATE
INITIAL
INITIALIZE
INITIATE
INPUT
INPUT-OUTPUT
INSERT
INSPECT
INSTALLATION
INTO
INVALID
IS
JAPANESE
JUST
JUSTIFIED
KANJI
KEPT
KEY
KEYBOARD
LABEL
LAST
LEADING
LEAVE
LEFT
LEFT-JUSTIFY
LEFTLINE
LENGTH
LENGTH-CHECK
LESS
LIMIT
LIMITS
LIN
LINAGE
LINAGE-COUNTER
LINE
LINES
LINE-COUNTER
LINKAGE
LOCAL-STORAGE
LOCK
LOCKING
LOW
LOW-VALUE
LOW-VALUES
MANUAL
MEMORY
MERGE
MESSAGE
MODE
MODULES
MORE-LABELS
MOVE
MULTIPLE
MULTIPLY
NAME
NAMED
NATIVE
NCHAR
NEGATIVE
173
NEXT
NO
NO-ECHO
NOMINAL
NOT
NOTE
NULL
NUMBER
NUMERIC
NUMERIC-EDITED
OBJECT-COMPUTER
OCCURS
OF
OFF
OMITTED
ON
OPEN
OPTIONAL
OR
ORDER
ORGANIZATION
OTHER
OTHERWISE
OUTPUT
OVERFLOW
OVERLINE
PACKED-DECIMAL
PADDING
PAGE
PAGE-COUNTER
PASSWORD
PERFORM
PF
PH
PIC
PICTURE
PLUS
POINTER
POS
POSITION
POSITIONING
POSITIVE
PREVIOUS
PRINT
PRINTER
PRINTER-1
PRINTING
PROCEDURE
PROCEDURE-POINTER
PROCEDURES
PROCEED
PROCESSING
PROGRAM
PROGRAM-ID
PROMPT
PROTECTED
PURGE
QUEUE
QUOTE
QUOTES
RANDOM
RANGE
RD
READ
READY
RECEIVE
RECORD
RECORD-OVERFLOW
RECORDING
RECORDS
REDEFINES
REEL
REFERENCE
REFERENCES
RELATIVE
RELEASE
RELOAD
REMAINDER
REMARKS
REMOVAL
RENAMES
REORG-CRITERIA
REPLACE
REPLACING
REPORT
REPORTING
REPORTS
REQUIRED
REREAD
RERUN
RESERVE
RESET
RETURN
RETURN-CODE
RETURNING
REVERSE
REVERSE-VIDEO
REVERSED
REWIND
REWRITE
RF
RH
RIGHT
RIGHT-JUSTIFY
ROLLBACK
ROUNDED
RUN
S01
S02
SAME
SCREEN
SD
SEARCH
SECTION
SECURE
SECURITY
SEEK
SEGMENT
SEGMENT-LIMIT
SELECT
SELECTIVE
SEND
SENTENCE
SEPARATE
SEQUENCE
SEQUENTIAL
SERVICE
SET
SIGN
SIZE
SKIP1
SKIP2
SKIP3
SORT
SORT-CONTROL
SORT-MERGE
SOURCE
SOURCE-COMPUTER
SPACE
SPACE-FILL
SPACES
SPECIAL-NAMES
STANDARD
STANDARD-1
STANDARD-2
START
STOP
STORE
STRING
SUB-QUEUE-1
SUB-QUEUE-2
SUB-QUEUE-3
SUBTRACT
SUM
SUPPRESS
SYMBOLIC
SYNC
SYNCRONIZED
SYSIN
SYSIPT
SYSLST
SYSOUT
SYSPUNCH
TAB
TABLE
TALLY
TALLYING
TAPE
TERMINAL
TERMINATE
TEST
TEXT
THAN
THEN
THROUGH
174
THRU
TIME
TIME-OF-DAY
TIMES
TITLE
TO
TOP
TOTALED
TOTALLING
TRACE
TRACK-AREA
TRACK-LIMIT
TRACKS
TRAILING
TRAILING-SIGN
TRANSFORM
TRUE
TYPE
UNDERLINE
UNIT
UNLOCK
UNSTRING
UNTIL
UP
UPDATE
UPON
UPSI-0
UPSI-1
UPSI-2
UPSI-3
UPSI-4
UPSI-5
UPSI-6
UPSI-7
USAGE
USE
USER
USING
VALUE
VALUES
VARIABLE
VARYING
WAIT
WHEN
WHEN-COMPILED
WITH
WORDS
WORKING-STORAGE
WRITE
WRITE-ONLY
ZERO
ZERO-FILL
ZEROES
ZEROS
000011
000012
000013
000014
000015
000016
00032C
000332
000340
00034A
000354
00036E
at
at
at
at
at
at
000331
00033F
000349
000353
00036D
o fim
MOVE
DISPLAY
DISPLAY
DISPLAY
ADD
STOP
176
Fonte gerado
******************************************************************
* COBOL DECLARATION FOR TABLE DB2DEPC.EPCV50A1_PAT_PPT
*
******************************************************************
01 EPCV50A1.
10 CD-EMP
PIC S9(5)V USAGE COMP-3.
10 NO-PPT-CRE
PIC S9(11)V USAGE COMP-3.
10 CD-TPO-VIN-PAT
PIC S9(3)V USAGE COMP-3.
10 CD-SEQ-TPO-VIN-PAT
PIC S9(2)V USAGE COMP-3.
10 CD-PAT-CRR
PIC S9(11)V USAGE COMP-3.
10 CD-TPO-PES
PIC X(1).
10 NM-PAT
PIC X(40).
10 NO-CPF-CGC
PIC S9(15)V USAGE COMP-3.
10 TS-INC
PIC X(26).
10 CD-USU-INC
PIC X(8).
10 TS-ULT-ATU
PIC X(26).
10 CD-USU-ULT-ATU
PIC X(8).
10 CD-PGM-MAN
PIC X(8).
Fonte codificado
(na procedure division)
EXEC SQL
INSERT INTO EPCV12A1_HIS_PPT
(CD_EMP,
NO_PPT_CRE,
CD_SEQ_HIS_PPT_CRE,
CD_STA_HIS_PPT_CRE,
DS_HIS_PPT_CRE,
TS_INC,
CD_USU_INC,
TS_ULT_ATU,
CD_USU_ULT_ATU,
CD_PGM_MAN)
VALUES
(:EPCV12A1.CD-EMP,
:EPCV12A1.NO-PPT-CRE,
:EPCV12A1.CD-SEQ-HIS-PPT-CRE,
:EPCV12A1.CD-STA-HIS-PPT-CRE,
:EPCV12A1.DS-HIS-PPT-CRE,
:EPCV12A1.TS-INC,
'MIGRACAO',
:EPCV12A1.TS-ULT-ATU,
'MIGRACAO',
'EPCBX55')
END-EXEC.
Fonte gerado
(na working-storage)
01 SQL-PLIST12.
05 SQL-PLIST-CON
PIC S9(9)
05 SQL-CALLTYPE
PIC S9(4)
05 SQL-PROG-NAME
PIC X(8)
05 SQL-TIMESTAMP-1 PIC S9(9)
05 SQL-TIMESTAMP-2 PIC S9(9)
05 SQL-SECTION
PIC S9(4)
05 SQL-CODEPTR
PIC S9(9)
05 SQL-VPARMPTR
PIC S9(9)
05 SQL-APARMPTR
PIC S9(9)
05 SQL-STMT-NUM
PIC S9(4)
05 SQL-STMT-TYPE
PIC S9(4)
05 SQL-PVAR-LIST12.
10 PRE-SQLDAID PIC X(8)
10 PRE-SQLDABC PIC S9(9)
10 PRE-SQLN
PIC S9(4)
10 PRE-SQLLD
PIC S9(4)
10 PRE-SQLVAR.
12 SQLVAR-BASE1.
15 SQL-PVAR-TYPE1
15 SQL-PVAR-LEN1
15 SQL-PVAR-ADDRS1.
20 SQL-PVAR-ADDR1
20 SQL-PVAR-IND1
15 SQL-PVAR-NAME1.
20 SQL-PVAR-NAMEL1
20 SQL-PVAR-NAMEC1
12 SQLVAR-BASE2.
15 SQL-PVAR-TYPE2
15 SQL-PVAR-LEN2
15 SQL-PVAR-ADDRS2.
20 SQL-PVAR-ADDR2
20 SQL-PVAR-IND2
15 SQL-PVAR-NAME2.
20 SQL-PVAR-NAMEL2
20 SQL-PVAR-NAMEC2
12 SQLVAR-BASE3.
15 SQL-PVAR-TYPE3
15 SQL-PVAR-LEN3
15 SQL-PVAR-ADDRS3.
20 SQL-PVAR-ADDR3
20 SQL-PVAR-IND3
15 SQL-PVAR-NAME3.
20 SQL-PVAR-NAMEL3
20 SQL-PVAR-NAMEC3
12 SQLVAR-BASE4.
15 SQL-PVAR-TYPE4
15 SQL-PVAR-LEN4
15 SQL-PVAR-ADDRS4.
20 SQL-PVAR-ADDR4
20 SQL-PVAR-IND4
15 SQL-PVAR-NAME4.
20 SQL-PVAR-NAMEL4
20 SQL-PVAR-NAMEC4
12 SQLVAR-BASE5.
15 SQL-PVAR-TYPE5
15 SQL-PVAR-LEN5
15 SQL-PVAR-ADDRS5.
20 SQL-PVAR-ADDR5
20 SQL-PVAR-IND5
15 SQL-PVAR-NAME5.
20 SQL-PVAR-NAMEL5
20 SQL-PVAR-NAMEC5
12 SQLVAR-BASE6.
15 SQL-PVAR-TYPE6
15 SQL-PVAR-LEN6
15 SQL-PVAR-ADDRS6.
20 SQL-PVAR-ADDR6
20 SQL-PVAR-IND6
15 SQL-PVAR-NAME6.
20 SQL-PVAR-NAMEL6
20 SQL-PVAR-NAMEC6
12 SQLVAR-BASE7.
15 SQL-PVAR-TYPE7
15 SQL-PVAR-LEN7
15 SQL-PVAR-ADDRS7.
20 SQL-PVAR-ADDR7
20 SQL-PVAR-IND7
15 SQL-PVAR-NAME7.
20 SQL-PVAR-NAMEL7
20 SQL-PVAR-NAMEC7
Fonte gerado
(na procedure division)
PERFORM SQL-INITIAL UNTIL SQL-INIT-DONE
CALL 'DSNHLI' USING SQL-PLIST12.
APNDICE G Indentao
O processo de indentao consiste em alinhar comandos, de forma que fique mais fcil ao programador
que estiver analisando o cdigo, visualizar e, por decorrncia, entender o conjunto de instrues.
Algumas instrues trabalham com subconjuntos (blocos) de (outras) instrues; por meio da
indentao coloca-se instrues que faam parte de um mesmo bloco num mesmo alinhamento.
O caso mais comum o das instrues de teste (IF), onde normalmente existe pelo menos um bloco de
instrues que deve ser executado quando a condio testada for satisfeita; e, opcionalmente, outro
bloco de instrues que devem ser executadas quando a condio testada no for satisfeita :
IF condio
bloco para condio satisfeita
ELSE
bloco para condio no satisfeita
END-IF
Visualmente facilita-se bastante se se deslocar os blocos algumas posies direita (duas ou trs
posies so suficientes) , para que fique destacado o ELSE e o END-IF, facilitando a anlise do fonte.
Se o primeiro bloco fosse
A = (B * C ) ** 4
C = A / 0.005
X = 1.2 / B * C
Ficaria mais difcil analisar do que se houvesse sido especificado com indentao :
IF condio
A = (B * C ) ** 4
C = A / 0.005
X = 1.2 / B * C
ELSE
A = (B * C ) ** 5
C = A / 0.015
X = 1.3 / B * C
END-IF
A vantagem fica muito mais evidente n seguinte situo, quando houver IFs encadeados :
Sem indentao :
IF condio
IF condicao
A = (B * C ) **
C = A / 0.005
X = 1.2 / B * C
ELSE
A = (B * C ) **
C = A / 0.055
X = 1.8 / B * C
END-IF
ELSE
IF condicao
A = (B * C ) **
C = A / 0.007
X = 1.9 / B * C
ELSE
A = (B * C ) **
C = A / 0.007
X = 1.5 / B * C
END-IF
END-IF
Com indentao :
IF condio
IF condicao
A = (B * C ) **
C = A / 0.005
X = 1.2 / B * C
ELSE
A = (B * C ) **
C = A / 0.055
X = 1.8 / B * C
END-IF
ELSE
IF condicao
A = (B * C ) **
C = A / 0.007
X = 1.9 / B * C
ELSE
A = (B * C ) **
C = A / 0.007
X = 1.5 / B * C
END-IF
END-IF
APNDICE G Pontos
Sintaticamente o ponto necessrio :
Aps um procedure-name
A procedure should be designed to perform only one function. All the statements in the procedure should be related
to accomplishing that function.
Choose a name for the procedure that describes its complete functionality.
Procedures can execute other procedures within the program by using the PERFORM statement. A PERFORM
statement causes the program to transfer control to another paragraph, execute all of the statements within that
paragraph, and return to the statement following the PERFORM statement. Repeated execution of another
paragraph can be accomplished with the optional UNTIL phrase that can be associated with the PERFORM
statement.
Keep the procedure easy to understand. A good length for a procedure is about one screen. This allows the
programmer attempting to analyze the program to see the entire procedure at once. This length is just a guideline.
Extremely simple procedures, such as one which moves a series of fields from an input record to a detail line for
printing could be longer than one screen and still be understandable, while extremely complex procedures, such as
one which perform a series of intricate calculations, would be better as a shorter routine especially one with lots of
explanatory comments.
/ ALTER
EXECUTE
/ CONVERT
/ DELETE
/ SORT / MERGE
END
***********************END-ACCEPT
*END-ADD
***********************END-CALL
END-CHAIN
*END-COMPUTE
***********************END-DELETE
*END-DIVIDE
*END-EVALUATE
*END-IF
*END-MULTIPLY
END-OF-PAGE
*END-PERFORM
*END-READ
***********************END-RECEIVE
END-RETURN
*END-REWRITE
END-SEARCH
END-START
*END-STRING
*END-SUBTRACT
*END-UNSTRING
END-WRITE
O comando "EXEC SQL COMMIT", utilizado geralmente para efetivar o commit do DB2 no deve
ser utilizado em ambiente online.
Quando usado recebe-se o response SQL -925 ( COMMIT NOT VALID in CICS environment) ou -926
para ROLLBACK.
Utilize o comando "EXEC CICS SYNCPOINT "
Character Purpose
Notes