Thursday 21 November 2024

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.