You are on page 1of 50

COBOL (1)

Para Mainframes IBM

N D I C E -----------

1 2 3 4 5 6

O que a linguagem COBOL .......................... Estrutura bsica de um programa COBOL .............. 2.1 - Exemplo de programas COBOL ................... Statements COBOL ................................... Conjuntos de caracteres ............................ Palavras ........................................... Variveis e constantes ............................. 6.1 Declarao ..................................... 6.2 Tipos .......................................... 6.3 Referncias .................................... IDENTIFICATION DIVISION ............................ ENVIRONMENT DIVISION ............................... DATA DIVISION ...................................... PROCEDURE DIVISION ................................. 10.1 Observaes gerais ........................... 10.1.1 Continuao de comandos .............. 10.1.2 Expresses ........................... 10.1.3 Referncia explcita a sub-strings ... 10.1.4 Referncia a variveis com OCCURS .... 10.1.5 Referncia a sub-strings e ndices ... 10.1.6 Acesso ao PARM ....................... 10.1.7 Referncia ao tamanho de uma varivel 10.1.8 Data e hora de execuo .............. 10.2 Comandos ao compilador ....................... 10.3 Comandos executveis ......................... 10.3.1 Comandos Gerais ..................... 10.3.2 Comandos de I/O ..................... 10.4 Exemplos de Embedded commands ...............

7 8 9 10

1 O que a linguagem Cobol


2

Nasceu no fim da dcada de 50 Orientada para aplicaes comerciais (ao contrario do FORTRAN, nascido mais ou menos na mesma poca, para aplicaes cientificas) COmmon Business Oriented Language Tentou ser padro; apesar disso, evoluiu apresentando diferenas entre as diversas implementaes dos compiladores Tipos de COBOL: COBOL ANSI-74, COBOL 68, COBOL 74, COBOL 80, COBOL ANSI 85, COBOL CODASYL, VISUAL COBOL

2 Estrutura bsica de um programa Cobol


******************************************************* Identificao IDENTIFICATION DIVISION.

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. *------------------------------------------------Declarao das variveis WORKING-STORAGE SECTION. *------------------------------------------------LINKAGE SECTION. *------------------------------------------------COMMUNICATION SECTION. *------------------------------------------------REPORT SECTION. ******************************************************* PROCEDURE DIVISION. Declarao dos procedimentos *******************************************************

2.1 Exemplos de programa Cobol


IDENTIFICATION DIVISION. PROGRAM-ID. P06. ***************************************************************** ENVIRONMENT DIVISION. ***************************************************************** DATA DIVISION. WORKING-STORAGE SECTION. 01 NRO-DADO PIC 9(5) VALUE 12345. 01 QUAD-CALCULADO PIC 9(10) VALUE 0. **************************************************************** PROCEDURE DIVISION. INICIO. COMPUTE QUAD-CALCULADO = NRO-DADO * NRO-DADO. IF QUAD-CALCULADO GREATER 999999 DISPLAY "O quadrado de " NRO-DADO " E' MAIOR QUE 999999" ELSE DISPLAY "O quadrado de " NRO-DADO " E' " QUAD-CALCULADO. STOP RUN. ID DIVISION. PROGRAM-ID. PGM001. ENVIRONMENT DIVISION. CONFIGURATION SECTION. INPUT-OUTPUT SECTION. DATA DIVISION. WORKING-STORAGE SECTION. 01 W-COMP PIC 9(0018) 01 W-COMP-1 01 W-COMP-2 01 W-COMP-3 PIC 9(0018) 01 W-COMP-4 PIC 9(0018) PROCEDURE DIVISION. MOVE .123E03 TO W-COMP-1. MOVE .123E03 TO W-COMP-2. DISPLAY 'W-COMP =' W-COMP. DISPLAY 'W-COMP-1 =' W-COMP-1. DISPLAY 'W-COMP-2 =' W-COMP-2. DISPLAY 'W-COMP-3 =' W-COMP-3. DISPLAY 'W-COMP-4 =' W-COMP-4. STOP RUN.

COMP COMP-1 COMP-2 COMP-3 COMP-4

VALUE VALUE VALUE VALUE VALUE

1. .1E01. .1E01. 1. 1.

Este programa produz a seguinte sada :


W-COMP W-COMP-1 W-COMP-2 W-COMP-3 W-COMP-4 =0000000000000000001 = .12300000E 03 = .12300000000000000E 03 =000000000000000001 =0000000000000000001

3 Statements
72 Posies :

Posio 1 a 6 = numerao Posio 7 Posio 8 = Continuao ( - ) Comentrio ( * ) ou

= Margem A Obrigatrio colocar na margem A: - nvel 01 - FD - nvel 77 = Margem B Colocar da margem B em diante: - tudo exceto o obrigatrio na margem A

Posio 12

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)

5 Palavras
5.1) RESERVADAS ou PRE-DEFINIDAS 5.1.1 CONECTORES (opcionais)
, ; (virgula) (ponto e virgula)

5.1.2 - REGISTROS (CAMPOS VARIAVEIS) ESPECIAIS


LENGTH OF RETURN-CODE

5.1.3 - CONSTANTES FIGURATIVAS


ZERO , ZEROS ou ZEROES zeros SPACE ou SPACES espaos HIGH-VALUE ou HIGH-VALUES LOW-VALUE ou LOW-VALUES ALL repetio de caracteres

5.1.4 - OPERADORES ARITMETICOS E RELACIONAIS


+ * / = > < NOT AND OR adio subtrao multiplicao diviso igual maior que menor que

5.1.5 - PALAVRAS-CHAVE e PALAVRAS OPCIONAIS PALAVRAS-CHAVE so verbos e outras palavras cujo significado fundamental para o entendimento da ao pelo compilador. Por exemplo, no comando IF VAR1 GREATER THAN VAR2 as palavras IF e GREATER so palavras-chave. As PALAVRAS OPCIONAIS aso 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 GREATER THAN VAR2 a palavra THAN opcional. 5.2) DEFINIDAS PELO PROGRAMADOR
6

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 FORMACAO 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

Nas referncias a data names de colunas DB2 : REG-CADCLI.CODCLI REG-ARQMOV.CODCLI

6 - VARIAVEIS E CONSTANTES
6.1) DECLARACAO SINTAXE para declarao de variveis: nmero_de_nvel nome [picture] [usage] [ocorrncias] [value].

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.
Registro Nvel 01

Cod Cliente

Nome

Data Nascimento

Local Nasc.

Nvel 02

Dia

Mes

Ano

UF

Cidade

Nvel 03

Declarao : Nvel Varivel 01 Registro 02 Cod.Cliente 02 Nome Cliente 02 Data Nascimento 03 Dia 03 Ms 03 Ano 02 Local Nascimento 03 UF 03 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 :
Registro Nvel 01

Cod Cliente

Nome

Data Nascimento

Local Nasc.

Nvel 05

Dia

Mes

Ano

UF

Cidade

Nvel 10

Declarao :
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

Normalmente utiliza-se algum tipo de indentao para facilitar a visualizao da estrutura e da hierarquia das variveis :
9

01

Registro Cod.Cliente Nome Cliente Data Nascimento 10 Dia 10 Ms 10 Ano 05 Local Nascimento 10 UF 10 Cidade 05 05 05

Voltando sintaxe para declarao de variveis: Nmeros de nveis especiais : 77 = variveis independentes (no so sub-diviso de outras nem tampouco tem subdivises) 88 = atribuies de nomes de condies (variveis que apresentem determinados contedos), para que possam ser referenciadas na parte de procedimentos. Ex.:
. . 10 88 88 88 88 . . . UF PAULISTA BAIANO MINEIRO PARANAENSE PIC X(02). VALUE SP. VALUE BA. VALUE MG. VALUE PR.

IF PAULISTA MOVE 15 TO ALIQUOTA . . .

Equivale a
IF UF = SP MOVE 15 TO ALIQUOTA . . .

Nome : nome atribudo varivel (data name)

10

Picture : 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. PIC X = alfanumrico PIC A = alfabtico PIC 9 = numrico 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.
Sintaxe : 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 i i

PIC 9(i)V9(d) = se o nmero (em decimal) contido na varivel tiver algarismos inteiros e d algarismos decimais Exemplos : PIC 99999 PIC 99999V99 ou ou PIC 9(5) PIC 9(5)V99

= 5 inteiros ou PIC 99999V9(2) = 5 inteiros e 2 decimais

11

Usage : formato dos dados na varivel. Sintaxe :


[USAGE] DISPLAY =

dados alfanumricos em EBCDIC, ou dados numricos em zonado. Cada caracter ocupa um byte. Mximo de 256 caracteres.

[USAGE] COMP-3

= dados numricos no formato decimal compactado. Neste caso a quantidade de noves especificada no PIC indica a quantidade de algarismos do maior nmero que poder estar contido nesta varivel; cada algarismo ocupa meio byte. Para determinar o tamanho total do campo, acrescentar mais meio byte para o sinal (ltimo meio byte direita; independentemente de o campo ter sido definido com S ou no). Exemplos: PIC 9(01) COMP-3 mximo 1 algarismo (de +9 a 9); campo com 1 byte PIC 9(02) COMP-3 mximo 2 algarismos (de +99 a 99); campo com 2 bytes PIC 9(03) COMP-3 mximo 3 algarismos (de +999 a 999); campo com 2 bytes PIC 9(04) COMP-3 mximo 4 algarismos (de +9999 a 9999); campo com 3 bytes PIC 9(05) COMP-3 mximo 5 algarismos (de +99999 a 99999); campo com 3 bytes PIC 9(06) COMP-3 mximo 6 algarismos (de +999999 a 999999); campo com 4 bytes PIC 9(07) COMP-3 mximo 7 algarismos (de +9999999 a 9999999); campo com 4 bytes 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 [USAGE] COMP = dados numricos no formato binrio ponto fixo. Valor expresso em decimal.
12

[USAGE] COMP-4

dados numricos no formato binrio ponto fixo. Valor expresso

em decimal.
[USAGE] COMP-1 = dados numricos no formato binrio ponto flutuante curto. No colocar PIC (ele estabelecido automaticamente pelo compilador). Valor expresso em notao cientfica (mantissa e expoente). = 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-2

ocorrncias : indica a quantidade de vezes que a varivel ocorre (usado para declarao de vetores).
Sintaxe : OCCURS n TIMES [DEPENDING ON varivel] Exemplo : 10 VALOR OCCURS 100 TIMES.

Variveis declaradas com OCCURS , ao serem referenciadas na PROCEDURE DIVISION, devem obrigatoriamente ter a indicao do ndice (atravs de literal ou outra varivel com contedo inteiro e positivo):
VALOR (01) VALOR (98) VALOR (WIDX)

VALUE : indica o contedo inicial que deve ser atribudo varivel (em tempo de compilao). Especificado atravs de literal ou constante figurativa.
Sintaxe : VALUE literal Exemplo : VALUE VALUE VALUE VALUE VALUE VALUE 100 ZERO .123E12 RELATORIO ALL * ALL *-

13

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.

14

8 - ENVIRONMENT DIVISION
8.1) CONFIGURATION SECTION. SOURCE-COMPUTER. OBJECT-COMPUTER. SPECIAL-NAMES. ... ... DECIMAL-POINT IS COMMA. Indica que a notao de nmeros utilizada : Pontos separando visualmente grupos de algarismos 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) 8.2) INPUT-OUTPUT SECTION. FILE-CONTROL.
Para arquivos SEQUENCIAIS

SELECT nome_interno_arquivo ASSIGN TO nome_externo.


Para arquivos VSAM Para arquivos de SORT ou MERGE

I-O-CONTROL.

15

9 - DATA DIVISION
FILE SECTION. Para declarao das variveis com os registros dos arquivos. 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.

16

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

15 PARTCAB PIC X(88) VALUE 'RELATORIO MENSAL DAS VENDAS EFETUA 'DAS AOS DOMINGOS'. DISPLAY 'Rua Antonio Jose Pereira de Almeida Junior Graziano d 'as Neves nro 1'

.........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)

17

10-1-3) Referncia explcita a sub-strings


MOVE W-HORARIO (01:02) MOVE W-HORARIO (03:02) MOVE W-HORARIO (05:02) Posio (byte) inicial TO WS-HORA TO WS-MIN TO WS-SEG Tamanho (qtdd bytes)

10-1-4) Referncia a variveis com OCCURS Devem indicar um ndice, que pode ser uma literal numrica (nmero inteiro positivo) ou uma outra varivel com um nmero inteiro positivo:
Vetores (1 dimenso) 10 VALOR PIC 9(9)V99 OCCURS 50. MOVE VALOR (01) TO WS-WORK MOVE VALOR (IND) TO WS-WORK Matrizes (mais de 1 dimenso) 10 VALORES-REF-1ANO OCCURS 10. 15 VALOR-REF-1MES PIC 9(9)V99 OCCURS 12. MOVE VALOR (WANO WMES) ndice de 1 nvel : indica qual varivel VALORES-REF-1ANO das 10 existentes TO WS-WORK

ndice de 2 nvel : indica qual varivel VALOR-REF-1MS das 12 (na realidade 120) existentes

10-1-5) Referncia a sub-strings e ndices


MOVE W-HORARIO (03:02) (WIND) Posio (byte) inicial TO WS-WORK ndice (s)

Tamanho (qtdd bytes)

18

10-1-6) Acesso ao PARM Para acessar dados informados atravs do PARM, declarar na LINKAGE SECTION uma estrutura com: Uma varivel PIC 9(02) COMP que recebe o tamanho dos dados Em continuao, outra varivel que ir conter, em tempo de execuo, os dados informados atravs do PARM; ela deve ter tamanho suficiente para receber todos os 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.

Se o programa for executado com PARM='01/01/200331/12/03' ele exibir


00018 01/01/2003 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 PIC 9(02) COMP. PIC X(10). PIC X(08).

PROCEDURE DIVISION USING W-DATA-VIA-PARM. DISPLAY 'VOU EXIBIR TAMANHO DE W-DATA-VIA-PARM' DISPLAY LENGTH OF W-DATA-VIA-PARM

exibem o seguinte :
VOU EXIBIR 000000020 TAMANHO DE W-DATA-VIA-PARM

19

10-1-8) Data e hora de execuo A funo CURRENT-DATE retorna a data e a hora atuais. As instrues
DISPLAY 'VOU EXIBIR FUNCTION CURRENT-DATE : ' DISPLAY '01 A 08 = ' FUNCTION CURRENT-DATE(01:08). DISPLAY '09 A 14 = ' FUNCTION CURRENT-DATE(09:06).

podem exibir o seguinte :


VOU EXIBIR FUNCTION CURRENT-DATE : 01 A 08 = 20030826 09 A 14 = 120822

20

10-3) Comandos executveis 10-3-1) Comandos Executveis Gerais

ADD Efetua soma entre varivel(eis) e literal(is).


Sintaxe : Exemplo : Sintaxe : Exemplo : Sintaxe : Exemplo : Sintaxe : Exemplo : Sintaxe : Exemplo : Sintaxe : Exemplo : ADD varivel/literal TO varivel-resultado ADD V1 TO V2 ADD varivel/literal TO varivel-resultado ON SIZE ERROR imperativo ADD V1 TO V2 ON SIZE ERROR PERFORM ESTOURO ADD varivel/literal TO varivel-resultado NOT ON SIZE ERROR imperativo ADD V1 TO V2 NOT ON SIZE ERROR PERFORM DEU ADD varivel/literal TO varivel-resultado ROUNDED ADD V1 TO V2 ROUNDED ADD varivel/literal TO varivel-resultado ROUNDED ON SIZE ERROR imperativo ADD V1 TO V2 ROUNDED ON SIZE ERROR PERFORM ESTOURO ADD varivel/literal TO varivel-resultado ROUNDED NOT ON SIZE ERROR imperativo ADD V1 TO V2 ROUNDED NOT ON SIZE ERROR PERFORM DEU

CALL Chama uma sub-rotina para execuo.


Sintaxe : Exemplos : CALL MYABEND CALL DATACONV USING DATANUM-VAI DATAEXTENSO-VEM CALL nome-rotina [USING parametro-1 [parametro-2 ... parametro-n] ]

COMPUTE
21

Efetua o clculo da expresso indicada e coloca o resultado na varivel especificada logo aps o COMPUTE.
Sintaxe : COMPUTE varivel = expresso

OBS. - O sinal de = pode ser substitudo pela palavra EQUAL COMPUTE COMPUTE COMPUTE COMPUTE COMPUTE COMPUTE COMPUTE COMPUTE Sintaxe : Exemplo : Sintaxe : Exemplo : Sintaxe : Exemplo : Sintaxe : Exemplo : CAMPO1 = 1 + 1 CAMPO1 EQUAL 1 + 1 CAMPOXX EQUAL CAMPOYY - CAMPOZZ ALFA = ALFA - ALFA BETA = BETA * BETA GAMA = DIVIDENDO / DIVISOR RESULT = (AA + BB) / CC RESULT = ((AA + BB) / CC) / DD

COMPUTE varivel = expresso ON SIZE ERROR comando imperativo COMPUTE XXX = YYY * 9 ON SIZE ERROR GO TO ESTOUROU COMPUTE varivel = expresso NOT ON SIZE ERROR COMPUTE XXX = YYY * 2 NOT ON SIZE ERROR PERFORM DEU COMPUTE varivel ROUNDED = expresso COMPUTE RESULT ROUNDED = ALFA + 8,5 COMPUTE varivel ROUNDED = expresso ON SIZE ERROR comando imperativo COMPUTE RESULT ROUNDED = AA * BB ON SIZE ERROR GO TO NAODEU

Sintaxe : COMPUTE varivel ROUNDED = expresso NOT ON SIZE ERROR comando imperativo Exemplo : COMPUTE XXX ROUNDED = AA + BB NOT ON SIZE ERROR GO TO DEU

CONTINUE No efetua processamento, servindo somente para contexto; usado em geral quando o teste sendo efetuado no tem processamento especfico para a condio satisfeita.
Exemplos : MOVE SPACES TO TEXTO. IF TEXTO EQUAL SPACES CONTINUE ELSE DISPLAY "NAO PASSA POR AQUI". IF CAMPOA GREATER THAN CAMPOB 22

CONTINUE ELSE COMPUTE CAMPOC = CAMPOA - CAMPOB. 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 THRU SAI-ERRO1. SIGLA-OK.

DIVIDE Efetua diviso.


Sintaxe : DIVIDE divisor INTO dividendo/cociente Exemplos : DIVIDE 2 INTO NUMERO DIVIDE 100 INTO VALOR Sintaxe : DIVIDE divisor INTO dividendo/cociente ROUNDED Exemplos : DIVIDE 2 INTO NUMERO ROUNDED DIVIDE 100 INTO VALOR ROUNDED Sintaxe : DIVIDE divisor INTO dividendo GIVING cociente Exemplos : DIVIDE 2 INTO QUANTIDADE GIVING METADE DIVIDE CRUZEIROS-POR-DOLAR INTO TOT-CRUZEIROS GIVING DOLARES Sintaxe : DIVIDE divisor INTO dividendo GIVING cociente ROUNDED Exemplos : DIVIDE 2 INTO QUANTIDADE GIVING METADE ROUNDED DIVIDE REAIS-POR-DOLAR INTO TOT-REAIS GIVING DOLARES ROUNDED Sintaxe : DIVIDE divisor INTO dividendo/cociente REMAINDER resto Exemplos : DIVIDE 2 INTO NUMERO REMAINDER PAR-IMPAR DIVIDE PESSOAS INTO VALOR REMAINDER VAI-SOBRAR Sintaxe : DIVIDE divisor INTO dividendo GIVING cociente REMAINDER resto Exemplos : DIVIDE 5 INTO QUANTIA GIVING CADA-UM-RECEBE REMAINDER PARA-O-SANTO 23

Sintaxe : DIVIDE divisor INTO dividendo/cociente ON SIZE ERROR imperativo Exemplos : DIVIDE QUEREM-PAGAR INTO TOTAL-CONTA ON SIZE ERROR DISPLAY "NINGUEM QUER PAGAR" Sintaxe : DIVIDE divisor INTO dividendo/cociente NOT ON SIZE ERROR imperativo Exemplos : DIVIDE QUEREM-PAGAR INTO TOTAL-CONTA NOT ON SIZE ERROR DISPLAY TOTAL-CONTA, " CADA UM" Sintaxe : DIVIDE divisor INTO dividendo ROUNDED ON SIZE ERROR imperativo Exemplos : DIVIDE QUEREM-PAGAR INTO TOTAL-CONTA ROUNDED ON SIZE ERROR DISPLAY "NINGUEM QUER PAGAR" Sintaxe : DIVIDE divisor INTO dividendo ROUNDED NOT ON SIZE ERROR imperativo Exemplos : DIVIDE QUEREM-PAGAR INTO TOTAL-CONTA ROUNDED NOT ON SIZE ERROR DISPLAY TOTAL-CONTA, " CADA UM" Sintaxe : DIVIDE dividendo/cociente BY divisor Exemplos : DIVIDE NUMERO BY 2 DIVIDE VALOR BY 100 Sintaxe : DIVIDE dividendo/cociente BY divisor ROUNDED Exemplos : DIVIDE NUMERO BY 2 ROUNDED DIVIDE VALOR BY 100 ROUNDED Sintaxe : DIVIDE dividendo BY divisor GIVING cociente Exemplos : DIVIDE QUANTIDAE BY GIVING METADE DIVIDE TOT-CRUZEIROS BY CRUZEIROS-POR-DOLAR GIVING DOLARES Sintaxe : DIVIDE dividendo BY divisor GIVING cociente ROUNDED Exemplos : DIVIDE QUANTIDADE BY 2 GIVING METADE ROUNDED DIVIDE TOT-CRUZEIROS BY CRUZEIROS-POR-DOLAR GIVING DOLARES ROUNDED Sintaxe : DIVIDE dividendo/cociente BY divisor REMAINDER resto Exemplos : DIVIDE NUMERO BY 2 REMAINDER PAR-IMPAR DIVIDE VALOR BY PESSOAS REMAINDER VAI-SOBRAR Sintaxe : DIVIDE dividendo BY divisor GIVING cociente REMAINDER resto Exemplos : DIVIDE QUANTIA BY 5 GIVING CADA-UM-RECEBE REMAINDER PARA-O-SANTO Sintaxe : Exemplos : DIVIDE dividendo/cociente BY divisor ON SIZE ERROR imperativo 24

DIVIDE TOTAL-CONTA BY QUEREM-PAGAR ON SIZE ERROR DISPLAY "NINGUEM QUER PAGAR" Sintaxe : DIVIDE dividendo/cociente BY divisor NOT ON SIZE ERROR imperativo Exemplos : DIVIDE TOTAL-CONTA BY QUEREM-PAGAR NOT ON SIZE ERROR DISPLAY TOTAL-CONTA, " CADA UM" Sintaxe : DIVIDE dividendo/cociente ROUNDED BY divisor ON SIZE ERROR imperativo Exemplos : DIVIDE TOTAL-CONTA ROUNDED BY QUEREM-PAGAR ON SIZE ERROR DISPLAY "NINGUEM QUER PAGAR" Sintaxe : DIVIDE dividendo/coc ROUNDED BY divisor NOT ON SIZE ERROR imperativo Exemplos : DIVIDE TOTAL-CONTA ROUNDED BY QUEREM-PAGAR NOT ON SIZE ERROR DISPLAY TOTAL-CONTA, " CADA UM"

EXAMINE Efetua verificao byte a byte num campo.


Sintaxe : Exemplo : EXAMINE campo TALLYING UNTIL FIRST literal EXAMINE TEXTO TALLYNG UNTIL FIRST " "

Sintaxe : EXAMINE campo TALLYING ALL literal Exemplos : EXAMINE TEXTO TALLYING ALL "VIDA" EXAMINE TEXTO TALLYING ALL "ARA" Sintaxe : Exemplo : EXAMINE campo TALLYING LEADING literal EXAMINE TEXTO TALLYNG LEADING 0

Sintaxe : Exemplo :

EXAMINE campo TALLYING UNTIL FIRST literal REPLACING BY literal EXAMINE NOME TALLYING UNTIL FIRST "JR." REPLACING BY "JUNIOR"

Sintaxe : EXAMINE campo TALLYING ALL literal REPLACING BY literal EXAMINE CAMPO TALLYING ALL "." REPLACING BY "*" EXAMINE CAMPO TALLYING ALL "," REPLACING BY "." EXAMINE CAMPO TALLYING ALL "*" REPLACING BY "," Sintaxe : Exemplo : Sintaxe : Exemplo : EXAMINE campo TALLYING LEADING literal REPLACING BY literal EXAMINE CAMPO TALLYING LEADING " " REPLACING BY "*" EXAMINE campo REPLACING ALL literal BY literal EXAMINE CAMPO REPLACING ALL "ALBERTO" BY "ROBERTO"

Sintaxe : EXAMINE campo REPLACING LEADING literal BY literal Exemplos : EXAMINE CAMPO REPLACING ALL "." BY "*" 25

EXAMINE CAMPO REPLACING ALL "," BY "." EXAMINE CAMPO REPLACING ALL "*" BY "," Sintaxe : Exemplo : Sintaxe : Exemplo : EXAMINE campo REPLACING UNTIL FIRST literal BY literal EXAMINE CAMPO REPLACING UNTIL FIRST " " BY "*" EXAMINE campo REPLACING FIRST literal BY literal EXAMINE CAMPO REPLACING FIRST "Q" BY "q"

EXIT
Ver PERFORM

GO TO Efetua desvio para a instruo identificada (CUIDADO : veja o comando ALTER !).
Sintaxe : Exemplo : Sintaxe : Exemplo : GO TO nome-da-instrucao GO TO CANCELAR GO TO nome-da-instrucao-1 .... nome-da-instrucao-n DEPENDING ON varivel GO TO CASO1 CASO2 CASO3 CASO4 DEPENDING ON CODIGO.

GOBACK Efetua a volta para o programa chamador.

IF Efetua teste da(s) condio(es) especificada, e efetua os desvios necessrios de acordo com o resultado. A base para identificar os pontos de desvio o PONTO ou o ELSE ou o END-IF. O PONTO e o END-IF indicam o fim da especificao da instruo; as instrues que esto aps o PONTO e o END-IF, portanto, so executadas tanto para os casos de condio satisfeita quanto para os casos de condio no satisfeita.
26

IF simples (especificao de instrues somente para o caso de condio satisfeita) : com o ponto delimitando abrangncia de instrues a executar:
Sintaxe : IF condio instrues para condio satisfeita instrues para condio satisfeita ou no satisfeita Exemplo : IF V1 LESS THAN V2 DISPLAY "V1 MENOR QUE V2" DISPLAY "VEM PRA CA DE QUALQUER JEITO"

com o END-IF delimitando abrangncia de instrues a executar:


Sintaxe : IF condio instrues para condio satisfeita END-IF instrues para condio satisfeita ou no satisfeita Exemplo : IF V1 LESS THAN V2 DISPLAY "V1 MENOR QUE V2" END-IF DISPLAY "VEM PRA CA DE QUALQUER JEITO"

27

IF composto (especificao de instrues tanto para o caso de condio satisfeita quanto para o caso de condio no satisfeita) : com o ponto delimitando abrangncia de instrues a executar:
Sintaxe : IF condio instrues para condio satisfeita ELSE instrues para condio no satisfeita instrues para condio satisfeita ou no satisfeita Exemplo : IF V1 LESS THAN V2 DISPLAY "V1 MENOR QUE V2" ELSE DISPLAY "V1 MAIOR OU IGUAL A V2" DISPLAY "VEM PRA CA DE QUALQUER JEITO"

com o END-IF delimitando abrangncia de instrues a executar:


Sintaxe : IF condio instrues para condio satisfeita ELSE instrues para condio no satisfeita END-IF instrues para condio satisfeita ou no satisfeita Exemplo : IF V1 LESS THAN V2 DISPLAY "V1 MENOR QUE V2" ELSE DISPLAY "V1 MAIOR OU IGUAL A V2" END-IF DISPLAY "VEM PRA CA DE QUALQUER JEITO"

IF composto (caso se queira especificar instrues somente para o caso de condio no satisfeita) :
IF V1 LESS THAN V2 CONTINUE ELSE DISPLAY "V1 MAIOR OU IGUAL A V2" DISPLAY "VEM PRA CA DE QUALQUER JEITO" ou 28

IFs aninhados (nested ifs)

IF V1 LESS THAN V2 CONTINUE ELSE DISPLAY "V1 MAIOR OU IGUAL A V2" END-IF DISPLAY "VEM PRA CA DE QUALQUER JEITO"

Exemplos de estruturas de instrues com IF's aninhados ("nested" IF's), ou seja, quando entre as instrues para condio satisfeita ou no, existem outros testes (IF's) a efetuar: Exemplo 1 : testes quando for a condio satisfeita. IF condicao-1 IF condicao-1a instrues para condicao-1a satisfeita ELSE instrues para condicao-1a no satisfeita ELSE instrues para condicao-1 no satisfeita instrues para condio satisfeita ou no satisfeita IF V1 LESS THAN V2 DISPLAY "V1 MENOR QUE V2" IF V3 LESS THAN V4 DISPLAY "V3 MENOR QUE V4" ELSE DISPLAY "V3 MAIOR OU IGUAL A V4" ELSE DISPLAY "V1 MAIOR OU IGUAL A V2" DISPLAY "VEM PRA CA DE QUALQUER JEITO" Exemplo 2 : testes quando for a condio no satisfeita. IF condicao-1 instrues para condicao-1 satisfeita ELSE IF condicao-1b instrues para condicao-1b satisfeita ELSE instrues para condicao-1b no satisfeita instrues para condicao1 satisfeita ou no IF V1 LESS THAN V2 DISPLAY "V1 MENOR QUE V2" ELSE DISPLAY "V1 MAIOR OU IGUAL A V2" IF V3 LESS THAN V4 DISPLAY "V3 MENOR QUE V4" ELSE 29

DISPLAY "V3 MAIOR OU IGUAL A V4" DISPLAY "VEM PRA CA DE QUALQUER JEITO". Exemplo 3 : testes quando for a condio satisfeita e tambm quando for a condio no satisfeita. IF condicao-1 IF condicao-1a instrues para condicao-1a satisfeita ELSE instrues para condicao-1a no satisfeita ELSE IF condicao-1b instrues para condicao-1b satisfeita ELSE instrues para condicao-1b no satisfeita instrues para condicao-1 satisfeita ou no IF V1 LESS THAN V2 DISPLAY "V1 MENOR QUE V2" IF V3 LESS THAN V4 DISPLAY "V3 MENOR QUE V4" ELSE DISPLAY "V3 MAIOR OU IGUAL A V4" ELSE DISPLAY "V1 MAIOR OU IGUAL A V2" IF V5 LESS THAN V6 DISPLAY "V5 MENOR QUE V6" ELSE DISPLAY "V6 MAIOR OU IGUAL A V6" DISPLAY "VEM PRA CA DE QUALQUER JEITO".

30

INITIALIZE Efetua a atribuio de zeros para variveis numricas e brancos para variveis alfanumricas (como default), ou do contedo especificado. A atribuio feita para todas as variveis que ocorrem repetidamente caso ela seja definida com OCCURS.
Sintaxe : Exemplo : INITIALIZE varivel [REPLACING tipo DATA BY literal/varivel] INITIALIZE TABELA INITIALIZE TABELA REPLACING NUMERIC DATA BY ZERO INITIALIZE TABELA REPLACING ALPHABETIC DATA BY SPACES

MOVE Efetua a atribuio (cpia) do contedo do campo emissor para o(s) campo(s) receptor(es).
Sintaxe : MOVE campo-emissor TO cpo-receptor-1 [cpo-receptor-2 ... cpo-receptor-n] Exemplos : MOVE EMISSOR TO RECEPTOR MOVE "XXXXX" TO RECEPTOR MOVE 0 TO CONTADOR LINHAS FOLHAS TOTAL-GASTO MOVE FUNCTION CURRENT-DATE (01:04) MOVE FUNCTION CURRENT-DATE (05:02) MOVE FUNCTION CURRENT-DATE (07:02) MOVE FUNCTION CURRENT-DATE (09:02) MOVE FUNCTION CURRENT-DATE (11:02) MOVE FUNCTION CURRENT-DATE (13:02) Posio (byte) inicial TO WS-ANO TO WS-MES TO WS-DIA TO WS-HORA TO WS-MIN TO WS-SEG Tamanho (qtdd bytes)

MULTIPLY Efetua a multiplicao entre dois campos.


Sintaxe : Exemplo : Sintaxe : Exemplo : Sintaxe : Exemplo : MULTIPLY multiplicador BY multiplicando/produto MULTIPLY 2 BY VALOR MULTIPLY multiplicador BY multiplicando/produto ROUNDED MULTIPLY 2.378 BY VALOR MULTIPLY multiplicador BY multiplicando/produto ON SIZE ERROR imperativo MULTIPLY 2 BY VALOR ON SIZE ERROR DISPLAY "ESTOUROU". 31

Sintaxe : Exemplo :

MULTIPLY multiplicador BY multiplicando/produto NOT ON SIZE ERROR imperativo MULTIPLY 2 BY VALOR NOT ON SIZE ERROR DISPLAY "NAO ESTOUROU".

Sintaxe : MULTIPLY multiplicador BY multiplicando GIVING produto Exemplos : MULTIPLY VALOR BY 2 GIVING DOBRO MULTIPLY 2 BY VALOR GIVING DOBRO Sintaxe : Exemplo : Sintaxe : MULTIPLY multiplicador BY multiplicando GIVING produto ROUNDED MULTIPLY VALOR BY 2.88 GIVING DOBRO ROUNDED

MULTIPLY multiplicador BY multiplicando GIVING produto ROUNDED ON SIZE ERROR imperativa Exemplo : MULTIPLY VALOR BY 2.88 GIVING DOBRO ROUNDED ON SIZE ERROR DISPLAY "ESTOUROU" Sintaxe : MULTIPLY multiplicador BY multiplicando GIVING produto ROUNDED NOT ON SIZE ERROR imperativa Exemplo : MULTIPLY VALOR BY 2.88 GIVING DOBRO ROUNDED NOT ON SIZE ERROR DISPLAY "NAO ESTOUROU"

NEXT SENTENCE Efetua um desvio para a instruo aps o prximo ponto.


TESTE. IF A > B NEXT SENTENCE ELSE MOVE X TO Y CONTINUA.

PERFORM Efetua a execuo de um conjunto de instrues que no estejam em linha (sub-rotina), isto , desvia para a instruo indicada (que deve ser o incio da sub-rotina), e executa a partir desse ponto at encontrar indicao de retorno, quando ento desvia para a instruo subsequente ao PERFORM.
Sintaxe 1: PERFORM procname Executa o bloco de instrues que se inicia em procname e termina em : Se procname for um nome de SECTION, executa a SECTION inteira. Se procname for o nome de uma instruo comum, executa at a instruo que antecede o procedure-name seguinte. 32

Exemplo :

PERFORM ROTINA1 PERFORM ABENDAR

Sintaxe 2:

Exemplo :

PERFORM procname UNTIL condio Executa o bloco de instrues que se inicia em procname e termina em : Se procname for um nome de SECTION, executa a SECTION inteira. Se procname for o nome de uma instruo comum, executa at a instruo que antecede o procedure-name seguinte. At que a condio especificada seja satisfeita. A responsabilidade de inicializar uma varivel de controle (relacionada condio) e de alter-la do programador. PERFORM IMPDET UNTIL LINHAS > 59

Sintaxe 3:

PERFORM UNTIL condio . Bloco de instrues a executar . . . END-PERFORM Executa o bloco de instrues especificado entre o PERFORM e o END-PERFORM at que a condio seja satisfeita. A responsabilidade de inicializar uma varivel de controle (relacionada condio) e de alter-la do programador. PERFORM UNTIL LINHAS > 59 PERFORM IMP-LINDET END-PERFORM PERFORM procname n TIMES Executa o bloco de instrues que se inicia em procname e termina em : Se procname for um nome de SECTION, executa a SECTION inteira. Se procname for o nome de uma instruo comum, executa at a instruo que antecede o procedure-name seguinte. Tantas vezes quantas n indicar (n pode ser uma literal ou uma varivel). PERFORM IMPDET 60 TIMES PERFORM IMPDET VEZES TIMES

Exemplo :

Sintaxe 4:

Exemplos :

Sintaxe 5:

PERFORM procname-x THRU procname-y Procname-x e procname-y no podem ser nomes de SECTION. Executa o bloco de instrues que se inicia em procname-x e termina em: Procname-y se esse procedure name tiver uma instruo EXIT (recomendado) 33

Na instruo imediatamente anterior ao procedure name seguinte a procname-y se esse procname-y tiver outra instruo que no seja EXIT Tantas vezes quantas n indicar (n pode ser uma literal ou uma varivel) A responsabilidade de inicializar uma varivel de controle (relacionada condio) e de alter-la do programador. PERFORM XXX THRU YYY ... ... . . . . . . . .

Exemplo : XXX. YYY. ZZZ.

Executa desde XXX at a instruo anterior ZZZ. OUTRO Exemplo : XXX. YYY. PERFORM XXX THRU YYY ... ... . . . EXIT.

Executa desde XXX at YYY (volta quando encontra o EXIT)

34

Sintaxe 6:

PERFORM procname-x THRU procname-y n TIMES Executa o bloco de instrues conforme sintaxe 5, n Exemplos : PERFORM XXX THRU YYY 12 TIMES ... ... XXX. . . . YYY. EXIT. Executa desde XXX at YYY (volta quando encontra o EXIT) 12 vezes Sintaxe 7:

vezes

PERFORM procname-x VARYING campo FROM n BY m UNTIL condico Executa o bloco de instrues conforme sintaxe 1, at que a condio especificada seja satisfeita. Antes de executar o bloco de instrues pela primeira vez, atribui o valor n varivel campo. Aps cada execuo do bloco, antes de voltar a execut-lo, incrementa m varivel campo. PERFORM IMPDET VARYING LINHAS FROM 1 BY 1 UNTIL LINHAS EQUAL 60
PERFORM procname-x THRU procname-y VARYING campo FROM n BY m UNTIL condico

Exemplo

Sintaxe 8:

Executa o bloco de instrues conforme sintaxe 5, at que a condio especificada seja satisfeita. Antes de executar o bloco de instrues pela primeira vez, atribui o valor n varivel campo. Aps cada execuo do bloco, antes de voltar a execut-lo, incrementa m varivel campo. Exemplo
60

PERFORM IMPDET THRU SAI-IMPDET VARYING LINHAS FROM 1 BY 1 UNTIL LINHAS EQUAL

35

STOP RUN Termina a execuo do programa.

SUBTRACT Efetua subtrao.


SUBTRACT subtraendo FROM minuendo/resto SUBTRACT 1 FROM FALTA. SUBTRACT CONTA FROM VALOR. SUBTRACT subtraendo FROM minuendo/resto ROUNDED SUBTRACT 1.77 FROM MEDIDA ROUNDED. SUBTRACT CONTA FROM VALOR ROUNDED. SUBTRACT subtraendo FROM minuendo/resto ON SIZE ERROR imperativo SUBTRACT REDUZIR FROM TOTAL ON SIZE ERROR DISPLAY "ESTOUROU". SUBTRACT subtraendo FROM minuendo/resto NOT ON SIZE ERROR imperativo SUBTRACT REDUZIR FROM TOTAL NOT ON SIZE ERROR DISPLAY "DEU". SUBTRACT subtraendo FROM minuendo/resto ROUNDED ON SIZE ERROR imperativo SUBTRACT REDUZIR FROM TOTAL ROUNDED ON SIZE ERROR DISPLAY "ESTOUROU". SUBTRACT subtraendo FROM minuendo/resto ROUNDED NOT ON SIZE ERROR imperativo SUBTRACT REDUZIR FROM TOTAL ROUNDED NOT ON SIZE ERROR DISPLAY "DEU". SUBTRACT subtraendo FROM minuendo GIVING resto SUBTRACT 1 FROM VEZES GIVING FALTA. SUBTRACT CONTA FROM PAGOU GIVING TROCO. SUBTRACT subtraendo FROM minuendo GIVING resto ROUNDED SUBTRACT 1.77 FROM MEDIDA GIVING RESULTADO ROUNDED. SUBTRACT CONTA FROM VALOR GIVING TROCO ROUNDED. SUBTRACT subtraendo FROM minuendo GIVING resto ON SIZE ERROR imperativo SUBTRACT REDUZIR FROM TOTAL GIVING RESTOU ON SIZE ERROR DISPLAY "ESTOUROU". SUBTRACT subtraendo FROM minuendo GIVING resto NOT ON SIZE ERROR imperativo SUBTRACT REDUZIR FROM TOTAL GIVING RESTOU NOT ON SIZE ERROR DISPLAY "DEU". 36

SUBTRACT subtraendo FROM minuendo GIVING resto ROUNDED ON SIZE ERROR imperativo SUBTRACT REDUZIR FROM TOTAL GIVING SOBROU ROUNDED ON SIZE ERROR DISPLAY "ESTOUROU". SUBTRACT subtraendo FROM minuendo GIVING resto ROUNDED NOT ON SIZE ERROR imperativo SUBTRACT REDUZIR FROM TOTAL GIVING SOBROU ROUNDED NOT ON SIZE ERROR DISPLAY "DEU".

ALTER Altera a instruo para a qual um desvio efetuado.


Sintaxe : ALTER identificacao-do-goto TO PROCEED TO desvio-do-goto Exemplo : ALTER DESVIO TO PROCEED TO CANCELAR. . . DESVIO. GO TO CONTINUAR.

37

10-3-2) Comandos de I/O

ACCEPT Obtm dados de um dispositivo de entrada, colocando-os na varivel especificada.


Sintaxe : ACCEPT varivel Exemplo : ACCEPT RESPOSTA ACCEPT NUMERO(INDEXADOR)

CLOSE Efetua o fechamento do(s) arquivo(s) especificado(s).


Sintaxe : CLOSE nome-arquivo1 [ nome-arquivo2 ... nome-arquivon ] Exemplos : CLOSE CLOSE CLOSE CLOSE CLOSE CLOSE CLOSE CLOSE CLOSE ARQENTRA ARQSAI ARQENTRA ARQENTSAI ARQENT1, ARQENT2, ARQENT3 ARQSAI1, ARQSAI2, ARQSAI3 ARQES1, ARQES2, ARQES3 ARQENT1 ARQSAI1 ARQES1 ARQENT1 ARQENT2 ARQSAI1 ARQSAI2 ARQES1

DISPLAY Exibe uma ou mais varivel(eis) e literal(is) em um dispositivo de sada.


Sintaxe : DISPLAY varivel/literal Exemplos : DISPLAY CAMPO1 DISPLAY 1 DISPLAY NOME-CLIENTE DISPLAY BOM DIA NOME-CLIENTE ! 38

DISPLAY "BOM DIA" Sintaxe : DISPLAY (linha, coluna) varivel/literal Exemplos : DISPLAY (1, 1) "BOM DIA" DISPLAY (20, 50) 2 DISPLAY (15, 30) "BOM DIA"

OPEN Efetua a abertura do(s) arquivo(s) especificado(s).


Sintaxe : OPEN tipo nome-arquivo1 [ nome-arquivo2 ... nome-arquivon ] [tipo nome-arquivo ...] tipo = INPUT OUTPUT I-O para arquivos de entrada para arquivos de sada para arquivos de entrada e sada (atualizao)

Exemplos : OPEN OPEN OPEN OPEN OPEN OPEN OPEN OPEN OPEN INPUT ARQENTRA OUTPUT ARQSAI ARQENTRA I-O ARQENTSAI INPUT ARQENT1, ARQENT2, ARQENT3 OUTPUT ARQSAI1, ARQSAI2, ARQSAI3 I-O ARQES1, ARQES2, ARQES3 INPUT ARQENT1, OUTPUT ARQSAI1, I-O ARQES1 INPUT ARQENT1 ARQENT2 OUTPUT ARQSAI1 ARQSAI2 I-O ARQES1

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.
LEITURA SEQUENCIAL Sintaxe : READ nome-arquivo [INTO nome-area-working] AT END comando-imperativo Se no for especificada a rea da Working-Storage Section, o registro ser disponibilizado na rea declarada em nvel 01 na DATA DIVISION / FILE SECTION / FD do arquivo

39

Se for especificada a rea da Working-Storage Section, o registro ser disponibilizado tanto na rea da DATA DIVISION / FILE SECTION / FD do arquivo quanto na rea da Working-Storage Section.

Exemplos : READ ARQUIVO-ENTRADA-SEQUENCIAL AT END GO TO TERMINOU. NAO-TERMINOU. READ ARQ-ENTRA-SEQ AT END MOVE "SIM" TO TERMINOU. IF TERMINOU = "SIM" PERFORM ROTFIM THRU SAI-ROTFIM ELSE PERFORM ROTPROC THRU SAI-ROTPROC. READ CADFUNC INTO AREA-LEITURA-DA-WORKING AT END GO TO FIM.

WRITE Efetua a gravao de um registro lgico em um arquivo.


PARA ARQUIVOS SEQUENCIAIS WRITE area-do-fd WRITE AREA-DE-GRAVACAO WRITE area-do-fd FROM area-da-working-storage WRITE AREA-SEM-SUBDIVISAO FROM AREA-COM-SUBDIVISAO WRITE AG-DISKSAI FROM REG-CADASTRO NOT INVALID KEY DISPLAY "JA TINHA REGISTRO COM ESSA CHAVE" PARA ARQUIVOS DE IMPRESSAO OBS.: todos os comando abaixo aceitam a clausula FROM tambm WRITE area-do-fd BEFORE ADVANCING literal/varivel WRITE ARIMP BEFORE ADVANCING 2 WRITE area-do-fd BEFORE ADVANCING PAGE WRITE ARIMP BEFORE ADVANCING PAGE WRITE area-do-fd BEFORE ADVANCING TAB WRITE ARIMP BEFORE ADVANCING TAB WRITE area-do-fd BEFORE ADVANCING mnemnico WRITE ARIMP BEFORE ADVANCING PULO

40

WRITE area-do-fd AFTER ADVANCING literal/varivel WRITE ARIMP AFTER ADVANCING 2 WRITE area-do-fd AFTER ADVANCING PAGE WRITE ARIMP AFTER ADVANCING PAGE WRITE area-do-fd AFTER ADVANCING TAB WRITE ARIMP AFTER ADVANCING TAB WRITE area-do-fd AFTER ADVANCING mnemnico WRITE ARIMP AFTER ADVANCING PULO

WRITE area-do-fd AFTER POSITIONING literal/varivel LINES WRITE ARIMP AFTER POSITIONING 2 LINES WRITE area-do-fd AFTER POSITIONING literal/varivel LINES AT END-OF-PAGE imperativo WRITE ARIMP AFTER POSITIONING 2 LINES AT END-OF-PAGE PERFORM CABEC THRU SAI-CABEC WRITE area-do-fd AFTER POSITIONING literal/varivel LINES AT EOP imperativo WRITE ARIMP AFTER POSITIONING 2 LINES AT EOP PERFORM CABEC THRU SAI-CABEC

REWRITE Efetua a regravao (atualizao in-place) de um registro lgico em um arquivo.

PARA ARQUIVOS SEQUENCIAIS REWRITE area-do-fd REWRITE AREA-GRAV REWRITE area-do-fd FROM area-da-working-storage REWRITE AREA-GRAV FROM REGISTRO-FUNCIONARIO PARA ARQUIVOS INDEXADOS E RELATIVOS REWRITE area-do-fd INVALID KEY imperativo REWRITE AG INVALID KEY "CHAVE INVALIDA" REWRITE area-do-fd NOT INVALID KEY imperativo REWRITE AG NOT INVALID KEY "CHAVE OK" REWRITE area-do-fd FROM area-da-working-storage INVALID KEY imperativo 41

REWRITE AG FROM REG-CADASTRO INVALID KEY "CHAVE INVALIDA" REWRITE area-do-fd FROM area-da-working-storage NOT INVALID KEY imperativo REWRITE AG FROM REG-CADASTRO NOT INVALID KEY "CHAVE OK"

42

10-4) Embedded commands (exemplos para SQL) Fonte codificado


EXEC SQL DECLARE EPCV50A1_PAT_PPT TABLE ( CD_EMP DECIMAL(5, 0) NOT NULL, NO_PPT_CRE DECIMAL(11, 0) NOT NULL, CD_TPO_VIN_PAT DECIMAL(3, 0) NOT NULL, CD_SEQ_TPO_VIN_PAT DECIMAL(2, 0) NOT NULL, CD_PAT_CRR DECIMAL(11, 0) NOT NULL, CD_TPO_PES CHAR(1) NOT NULL, NM_PAT CHAR(40) NOT NULL, NO_CPF_CGC DECIMAL(15, 0) NOT NULL, TS_INC TIMESTAMP NOT NULL, CD_USU_INC CHAR(8) NOT NULL, TS_ULT_ATU TIMESTAMP NOT NULL, CD_USU_ULT_ATU CHAR(8) NOT NULL, CD_PGM_MAN CHAR(8) NOT NULL ) END-EXEC.

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).

43

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 COMP-4 VALUE +2637824. COMP-4 VALUE +30. VALUE 'EPCBX55 '. COMP-4 VALUE +389353535. COMP-4 VALUE +379351652. COMP-4 VALUE +3. COMP-4. COMP-4 VALUE +0. COMP-4 VALUE +0. COMP-4 VALUE +1343. COMP-4 VALUE +232. VALUE 'SQLDA '. COMP-4 VALUE +324. COMP-4 VALUE +7. COMP-4 VALUE +7. PIC S9(4) COMP-4 VALUE +484. PIC S9(4) COMP-4 VALUE +1280. 44

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

PIC S9(9) COMP-4. PIC S9(9) COMP-4. PIC S9(4) COMP-4 VALUE +0. PIC X(30) VALUE ' '. PIC S9(4) COMP-4 VALUE +484. PIC S9(4) COMP-4 VALUE +2816. PIC S9(9) COMP-4. PIC S9(9) COMP-4. PIC S9(4) COMP-4 VALUE +0. PIC X(30) VALUE ' '. PIC S9(4) COMP-4 VALUE +484. PIC S9(4) COMP-4 VALUE +512. PIC S9(9) COMP-4. PIC S9(9) COMP-4. PIC S9(4) COMP-4 VALUE +0. PIC X(30) VALUE ' '. PIC S9(4) COMP-4 VALUE +452. PIC S9(4) COMP-4 VALUE +2. PIC S9(9) COMP-4. PIC S9(9) COMP-4. PIC S9(4) COMP-4 VALUE +0. PIC X(30) VALUE ' '. PIC S9(4) COMP-4 VALUE +452. PIC S9(4) COMP-4 VALUE +20. PIC S9(9) COMP-4. PIC S9(9) COMP-4. PIC S9(4) COMP-4 VALUE +0. PIC X(30) VALUE ' '. PIC S9(4) COMP-4 VALUE +452. PIC S9(4) COMP-4 VALUE +26. PIC S9(9) COMP-4. PIC S9(9) COMP-4. PIC S9(4) COMP-4 VALUE +0. PIC X(30) VALUE ' '. PIC S9(4) COMP-4 VALUE +452. 45

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

PIC S9(4) COMP-4 VALUE +26. PIC S9(9) COMP-4. PIC S9(9) COMP-4. PIC S9(4) COMP-4 VALUE +0. PIC X(30) VALUE ' '.

Fonte gerado (na procedure division)


PERFORM SQL-INITIAL UNTIL SQL-INIT-DONE CALL 'DSNHLI' USING SQL-PLIST12.

46

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 CHAINING 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 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 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

47

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 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

COMPUTATIONAL-6 COMPUTATIONAL-X COMPUTE CONFIGURATION CONSOLE CONTAINS CONTENT CONTINUE CONTROL CONTROLS CONVERT CONVERTING COPY CORE-INDEX CORR CORRESPONDING COUNT CRT CURRENCY CURRENT-DATE CURSOR DATA DATE DATE-COMPILED DATE-WRITTEN DAY DAY-OF-WEEK DECS DE 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

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 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 THRU TIME TIME-OF-DAY

LOW-VALUES MANUAL MEMORY MERGE MESSAGE MODE MODULES MORE-LABELS MOVE MULTIPLE MULTIPLY NAME NAMED NATIVE NCHAR NEGATIVE NEXT NO NO-ECHO NOMINAL NOT NOTE NULL NUMBER NUMERIC NUMERIC-EDITED OBJECT-COMPUTER OCCURS OF 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

48

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

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

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

49

50

You might also like