COBOL - Comando CLOSE - www.cadcobol.com.br


Volta a página anterior

Volta ao Menu Principal


Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF. - cad_cobol@hotmail.com

CLOSE
Comando usado no final dos trabalhos para liberar os arquivos e desativar os dispositivos.

Sintaxe do comando CLOSE


Sintaxe do comando CLOSE


Sintaxe do comando CLOSE


file-name-1
Designa o arquivo no qual a instrução CLOSE deve operar.
Se mais de um nome de arquivo for especificado, os arquivos não precisarão ter a mesma organização ou acesso.
file-name-1 não deve ser um arquivo de classificação ou mesclagem.

REEL e UNIT
Você pode especificar essas frases apenas para arquivos com múltiplos volumes ou volume único QSAM.
Os termos REEL e UNIT são intercambiáveis.

WITH NO REWIND and FOR REMOVAL
Essas frases se aplicam apenas aos arquivos de fita QSAM .
Se eles forem especificados para dispositivos de armazenamento aos quais não se aplicam, a operação de fechamento será bem-sucedida e um valor da chave de status será definido para indicar que o arquivo estava em uma mídia que não é do rolo.

Uma instrução CLOSE pode ser executada apenas para um arquivo no modo aberto.
Após a execução bem-sucedida de uma instrução CLOSE (sem a frase REEL / UNIT, se estiver usando o formato 1):

  • A área de registro associada ao nome do arquivo não está mais disponível.
    A execução mal sucedida de uma instrução CLOSE deixa indefinida a disponibilidade dos dados do registro.

  • Uma instrução OPEN para o arquivo deve ser executada antes que qualquer outra instrução de entrada / saída possa ser executada para o arquivo e antes que os dados sejam movidos para uma entrada de descrição de registro associada ao arquivo.

Se a cláusula FILE STATUS for especificada na entrada de controle de arquivo, a chave de status do arquivo associado será atualizada quando a instrução CLOSE for executada.

Se o arquivo estiver em um status aberto e a execução de uma instrução CLOSE for mal sucedida, o procedimento EXCEPTION / ERROR (se especificado) para esse arquivo será executado.


Exemplo:
      *-----------------------------------------------------------------
       INPUT-OUTPUT SECTION.
      *-----------------------------------------------------------------
       FILE-CONTROL.

           SELECT ARQENT ASSIGN TO ARQENT
                  FILE STATUS IS WS-FS-ARQENT.

           SELECT ARQSAI ASSIGN TO ARQSAI
                  FILE STATUS IS WS-FS-ARQSAI.

      *-----------------------------------------------------------------
       WORKING-STORAGE SECTION.
      *-----------------------------------------------------------------

       01  WS-AREA-AUXILIAR.
           05  WS-FS-ARQENT              PIC X(002)  VALUE SPACES.
           05  WS-FS-ARQSAI              PIC X(002)  VALUE SPACES.
           05  WS-PROCESSO               PIC X(070)  VALUE SPACES.
           05  WS-MENSAGEM               PIC X(070)  VALUE SPACES. 

      *-----------------------------------------------------------------
       PROCEDURE DIVISION.
      *-----------------------------------------------------------------

           PERFORM P100-ROTINA-INICIAL
           PERFORM P200-ROTINA-PRINCIPAL
           PERFORM P950-ROTINA-FINAL
           GOBACK.

      *-----------------------------------------------------------------
       P950-ROTINA-FINAL.
      *-----------------------------------------------------------------

           MOVE 'P100-ROTINA-INICIAL' TO  WS-PROCESSO.

           CLOSE ARQENT.
           IF WS-FS-ARQENT NOT EQUAL '00'
              MOVE SPACES TO WS-MENSAGEM
              MOVE 'ERRO FECHAMENTO ARQUIVO DE ENTRADA' TO WS-MENSAGEM
              PERFORM P900-ROTINA-ERRO
           END-IF. 

         * Também poderia ser codificado assim:

           IF WS-FS-ARQENT NOT EQUAL '00'
              MOVE SPACES                 TO WS-MENSAGEM
              STRING 'ERRO FECHAMENTO ARQUIVO ARQENT FILE STATUS: '
                     WS-FS-ARQENT
                     DELIMITED BY SIZE  INTO WS-MENSAGEM
              END-STRING
              PERFORM P9000-ROTINA-ERRO
           END-IF. 

           CLOSE ARQSAI.
           IF WS-FS-ARQSAI NOT EQUAL '00'
              MOVE SPACES TO WS-MENSAGEM
              MOVE 'ERRO FECHAMENTO ARQUIVO DE SAIDA  ' TO WS-MENSAGEM
              PERFORM P900-ROTINA-ERRO
           END-IF.

      * Também poderia ser codificado assim:

           IF WS-FS-ARQSAI NOT EQUAL '00'
              MOVE SPACES                 TO WS-MENSAGEM
              STRING 'ERRO FECHAMENTO ARQUIVO ARQSAI FILE STATUS: '
                     WS-FS-ARQSAI
                     DELIMITED BY SIZE  INTO WS-MENSAGEM
              END-STRING
              PERFORM P9000-ROTINA-ERRO
           END-IF.

        P100-FIM.
            EXIT. 

      *-----------------------------------------------------------------
       P900-ROTINA-ERRO.
      *-----------------------------------------------------------------

           DISPLAY 'PROGRAMA XXXXXXXX'
           DISPLAY 'PARAGRAFO .......  - ' WS-PROCESSO
           DISPLAY 'MENSAGEM .......   - ' WS-MENSAGEM
           DISPLAY 'FILE STATUS ARQENT - ' WS-FS-ARQENT
           DISPLAY 'FILE STATUS ARQSAI - ' WS-FS-ARQSAI
           MOVE 99 TO RETURN-CODE
           GOBACK.

       P900-FIM.
           EXIT. 

      *-------------------------------------------------------------
       P9000-ROTINA-ERRO.
      *-------------------------------------------------------------

           DISPLAY '*-----------------------------------------------'
           DISPLAY '* ERRO FILE STATUS FIM DE PROCESSAMENTO XXXXXXXX'
           DISPLAY '*-----------------------------------------------'
           DISPLAY '*                                               '
           DISPLAY 'WS-MENSAGEM '
           DISPLAY '*-----------------------------------------------'
           MOVE 99 TO RETURN-CODE
           GOBACK.

       P9000-FIM.
           EXIT.