Discussões sobre a linguagem COBOL e suas melhores práticas.

Como resolver FILE STATUS 39 em programas COBOL

Mais
4 dias 8 horas atrás #131 por bopnet
O FILE STATUS 39 ocorre quando existe alguma incompatibilidade entre as características do arquivo definidas no programa COBOL e as características reais do arquivo ou dataset utilizado durante a execução.
Em outras palavras, o programa espera encontrar um arquivo com determinada organização, tamanho ou formato de registro, mas o arquivo apresentado possui características diferentes.
Entre as causas mais comuns estão:
  • LRECL diferente do tamanho definido na FD;
  • Divergência entre registros fixos e variáveis;
  • ORGANIZATION diferente da organização real do arquivo;
  • Definição incorreta da chave de um arquivo indexado;
  • Uso de arquivo criado com características diferentes das esperadas;
  • DDNAME do JCL associado ao arquivo errado;
  • Diferença entre a definição do arquivo no programa e no catálogo;
  • Alteração do copybook sem recriação ou ajuste do arquivo.
Exemplo de definição com FILE STATUS:
Code:
      SELECT ARQUIVO-CLIENTES           ASSIGN TO CLIENTES           ORGANIZATION IS SEQUENTIAL           FILE STATUS IS WS-FILE-STATUS.
Na FILE SECTION:
Code:
      FD  ARQUIVO-CLIENTES           RECORDING MODE IS F.       01  REGISTRO-CLIENTE.           05 CLIENTE-CODIGO      PIC 9(06).           05 CLIENTE-NOME        PIC X(40).           05 CLIENTE-CIDADE      PIC X(30).
Nesse exemplo, o registro possui 76 posições. Portanto, o arquivo utilizado precisa ser compatível com essa definição.
O tratamento do status pode ser feito da seguinte forma:
Code:
      OPEN INPUT ARQUIVO-CLIENTES       IF WS-FILE-STATUS NOT = "00"           DISPLAY "ERRO NA ABERTURA DO ARQUIVO"           DISPLAY "FILE STATUS: " WS-FILE-STATUS           STOP RUN       END-IF
Para investigar o FILE STATUS 39, verifique:
  1. O tamanho total do registro definido na FD;
  2. O LRECL e o RECFM do dataset;
  3. A cláusula ORGANIZATION;
  4. A definição da chave, caso o arquivo seja indexado;
  5. O DDNAME utilizado pelo programa;
  6. Se o arquivo foi recriado depois de alguma alteração no layout;
  7. Se programa, copybook e arquivo estão utilizando a mesma versão do layout.
Em ambientes mainframe, também é importante consultar as mensagens do job no spool. Muitas vezes, a mensagem complementar apresenta detalhes que não aparecem somente no FILE STATUS.
Você já encontrou o FILE STATUS 39 em algum programa COBOL? Qual era a incompatibilidade e como resolveu?

COBOL is not DEAD!

Por favor Entrar ou Registrar para participar da conversa.

Powered by Fórum Kunena