PROCEDURE DIVISION: Contém o código que irá manipular os dados descritos na DATA DIVISION. É nesta divisão que o desenvolvedor descreverá a lógica do programa. Consiste em instruções executáveis usando variáveis definidas na divisão de dados. Nesta divisão, nomes de parágrafo e seção são definidos pelo usuário. Deve haver pelo menos uma declaração na divisão de procedimento. A última instrução para encerrar a execução nesta divisão é STOP RUN que é usado nos programas de chamada ou EXIT PROGRAM que é usado nos programas chamados.
A estrutura da PROCEDURE DIVISION é a seguinte:
- A execução começa com a primeira instrução na Divisão de Procedimentos, excluindo declarativos. As declarações são executadas na ordem em que são apresentadas para compilação, a menos que as regras da instrução ditem alguma outra ordem de execução.
- A divisão de procedimento termina no cabeçalho END PROGRAM, antes do início do próximo programa fonte COBOL ou no final físico do programa. O fim físico do programa é a posição física em um programa de origem, após o qual não aparecem mais declarações.
PROCEDURE DIVISION:
Dentro da Procedure Division, um procedimento consiste em:
- Uma seção ou um grupo de seções
- Um parágrafo ou grupo de parágrafos.
Nota: Uma PROCEDURE COBOL não deve ser confundido com um procedimento ILE (um programa de origem ILE COBOL). Um PROCEDURE-NAME é um nome definido pelo usuário que identifica uma seção ou um parágrafo.
SECTION:
- Uma SECTION é constituída por um cabeçalho de seção opcionalmente seguido por um ou mais parágrafos.
- A seção de cabeçalho é um nome da seção seguido de: a palavra-chave SECTION, um número de segmento opcional e um período de separação. A seção de cabeçalho deve começar na Área A.
- A SECTION-NAME é uma palavra definida pelo usuário que identifica uma seção. Se referenciado, um SECTION-NAME deve ser exclusivo dentro do programa no qual ele é definido, porque ele não pode ser qualificado.
- Uma seção termina imediatamente antes do próximo cabeçalho da seção, ou no final da PROCEDURE-DIVISION ou, na parte declarativa, nas palavras-chave END DECLARATIVES.
PARAGRAPH:
- Um PARAGRAPH (parágrafo) consiste em um nome de ponto seguido por um período de separação, opcionalmente seguido por uma ou mais sentenças.
- Um PARAGRAPH-NAME é uma palavra definida pelo usuário que identifica um parágrafo.
- Um nome de parágrafo, porque ele pode ser qualificado, não precisa ser exclusivo.
- O nome do parágrafo deve começar na Área A.
- Um parágrafo termina imediatamente antes do próximo nome de parágrafo ou cabeçalho de seção ou no final da PROCEDURE-DIVISION.
- Na parte declarativa, um parágrafo termina imediatamente antes do próximo parágrafo, a próxima instrução USE ou as palavras-chave END DECLARATIVES.
- Se um parágrafo de um programa estiver contido em uma seção, todos os parágrafos do programa devem estar contidos em seções.
SENTENCE:
- A SENTENCE consiste em uma ou mais declarações terminados por um separador período.
STATEMENT:
- A STATEMENT (declaração) é uma combinação sintaxe válida de identificadores e símbolos (literais, operadores relacionais, e assim por diante) começando com um verbo COBOL.
- A execução começa com a primeira instrução na Divisão de Procedimentos, excluindo declarativos. As declarações são executadas na ordem em que são apresentadas para compilação, a menos que as regras da instrução ditem alguma outra ordem de execução.
- A PROCEDURE DIVISION termina no final físico do programa; Ou seja, a posição física em um programa de origem, após o qual não aparecem mais declarações.
IDENTIFIER:
- Um IDENTIFIER (identificador) é uma sintaticamente correta combinação de um nome de dados, com seus qualificadores, subscritos e modificadores de referência como exigido para unicidade de referência, que nomeia um item de dados. Em qualquer referência de PROCEDURE-DIVISION (exceto o teste de classe ou o argumento de função em uma função intrínseca de teste), o conteúdo de um IDENTIFIER deve ser compatível com a classe especificada através de sua cláusula PICTURE ou FORMAT ou os resultados são imprevisíveis.
Exemplo:
PROCEDURE DIVISION.
DECLARATIVES.
ERROR-IT SECTION.
USE AFTER STANDARD ERROR PROCEDURE ON INPUT-DATA.
ERROR-ROUTINE.
IF CHECK-IT = "30" ADD 1 TO DECLARATIVE-ERRORS.
END DECLARATIVES.
BEGIN-NON-DECLARATIVES SECTION.
100-BEGIN-IT.
OPEN INPUT INPUT-DATA OUTPUT REPORT-OUT.
110-READ-IT.
READ INPUT-DATA RECORD
AT END MOVE "Y" TO EOF-SW.
IF EOF-SW NOT = "Y" ADD 1 TO RECORDS-IN.
200-MAIN-ROUTINE.
PERFORM PROCESS-DATA UNTIL EOF-SW = "Y".
PERFORM FINAL-REPORT THRU FINAL-REPORT-EXIT.
DISPLAY "TOTAL RECORDS IN = " RECORDS-IN
UPON WORK-STATION.
DISPLAY "DECLARATIVE ERRORS = " DECLARATIVE-ERRORS
UPON WORK-STATION.
STOP RUN.
PROCESS-DATA.
IF RECORD-ID = "G"
PERFORM PROCESS-GEN-INFO
ELSE
IF RECORD-CODE = "C"
PERFORM PROCESS-SALES-DATA
ELSE
PERFORM UNKNOWN-RECORD-TYPE.