COBOL - Comando REWRITE - 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

REWRITE
O comando REWRITE é usado para atualizar registro alterados de um arquivo.
Se a cláusula FROM for incluída, o identifier-1 ou literal-1 será copiado para o record-name-1 antes do registro ser atualizado.
Se o registro estava locado durante o READ, o REWRITE irá desalocar (unlock) do mesmo automaticamente.

Há dois formatos diferentes que são usados para dois tipos diferentes de regravação e são descritos abaixo:

  1. O primeiro formato serve para atualização em arquivos sequenciais.
    O último registro lido será atualizado pelo conteúdo do record-name-1.

  2. O segundo formato serve para atualização em arquivos randômicos.
    O último registro lido será atualizado pelo conteúdo do record-name-1.
    Se a chave do registro for alterada o mesmo não será alterado e os códigos entre INVALID KEY e NOT INVALID KEY serão executados.
    Se a alteração for feita com sucesso os códigos entre NOT INVALID KEY e END-REWRITE serão executados.

Formato:

record-name-1
Deve ser o nome de um registro lógico em uma entrada DATA DIVISION FD.
O nome do registro pode ser qualificado.

FROM phrase
O resultado da execução da instrução REWRITE com a frase identifier-1 FROM é equivalente à execução das instruções a seguir na ordem especificada.

MOVE identifier-1 TO record-name-1.
REWRITE record-name-1

O MOVE é executado de acordo com as regras da instrução MOVE sem a frase CORRESPONDING.

identifier-1
identifier-1 pode fazer referência a um dos seguintes itens:
  • Uma descrição do registro para outro arquivo aberto anteriormente
  • Uma função alfanumérica ou national
  • Um item de dados definido na SEÇÃO WORKING-STORAGE, na LOCAL-STORAGE SECTION ou na LINKAGE SECTION
O identifier-1 deve ser um item de envio válido com orecord-name-1 como o item de recebimento, de acordo com as regras da instrução MOVE.

identifier-1 e record-name-1 não devem se referir à mesma área de armazenamento.

O identifier-1 não deve ser um item de grupo de comprimento dinâmico ou um item elementar de comprimento dinâmico.

Depois que a instrução REWRITE é executada, as informações ainda estão disponíveis no identifier-1 ( frases INTO e FROM em "Instalações de processamento comuns").

INVALID KEY phrases
Uma condição INVALID KEY existe quando:
  • O modo de acesso é seqüencial e o valor contido na RECORD KEY principal do registro a ser substituído não é igual ao valor do item de dados principal RECORD KEY do último registro recuperado do arquivo
  • O valor contido na RECORD KEY principal não é igual ao de nenhum registro no arquivo
  • O valor de um item de dados ALTERNATE RECORD KEY para o qual DUPLICATES não está especificado é igual ao valor de um registro já existente no arquivo

END-REWRITE phrase
Esse terminador de escopo explícito serve para delimitar o escopo da instrução REWRITE.
END-REWRITE permite que uma instrução REWRITE condicional seja aninhada em outra instrução condicional.
END-REWRITE também pode ser usado com uma declaração REWRITE imperativa.

Arquivos seqüenciais
Para arquivos no modo de acesso seqüencial, a última instrução de entrada/saída anterior executada para esse arquivo deve ser uma instrução READ executada com sucesso.
Quando a instrução REWRITE é executada, o registro recuperado por essa instrução READ é logicamente substituído.

O número de posições de caracteres no registro-nome-1 deve ser igual ao número de posições de caracteres no registro que está sendo substituído.

A frase INVALID KEY não deve ser especificada para um arquivo com organização sequencial.
Um procedimento de EXCEPTION/ERROR (EXCEÇÃO/ERRO) pode ser especificado.

Arquivos indexados
O número de posições de caracteres no record-name-1 pode ser diferente do número de posições de caracteres no registro que está sendo substituído.

Quando o modo de acesso é seqüencial, o registro a ser substituído é especificado pelo valor contido na RECORD KEY principal.
Quando a instrução REWRITE é executada, esse valor deve ser igual ao valor do item de dados da chave do registro principal no último registro lido deste arquivo.

A frase INVALID KEY e um procedimento EXCEPTION / ERROR aplicável podem ser omitidos.

Quando o modo de acesso é aleatório ou dinâmico, o registro a ser substituído é especificado pelo valor contido na RECORD KEY principal.

Os valores dos itens de dados ALTERNATE RECORD KEY no registro reescrito podem diferir daqueles do registro que está sendo substituído.
O sistema garante que o acesso posterior ao registro possa ser baseado em qualquer uma das chaves do registro.

Se existir uma condição de chave inválida, a execução da instrução REWRITE não será bem-sucedida, a operação de atualização não ocorrerá e os dados no registro-nome-1 não serão afetados.

Arquivos relativos
O número de posições de caracteres no record-name-1 pode ser diferente do número de posições de caracteres no registro que está sendo substituído.

Para arquivos relativos no modo de acesso seqüencial, a frase INVALID KEY não deve ser especificada. Um procedimento de EXCEÇÃO/ERRO pode ser especificado.

Para arquivos relativos no modo de acesso aleatório ou dinâmico, a frase INVALID KEY ou um procedimento EXCEPTION/ ERROR aplicável pode ser especificado.
Ambos podem ser omitidos.

Quando o modo de acesso é aleatório ou dinâmico, o registro a ser substituído é especificado no item de dados CHAVE RELATIVA.
Se o arquivo não contiver o registro especificado, existe uma condição de chave inválida e, se especificada, a instrução imperativa INVALID KEY é executada.
A operação de atualização não ocorre e os dados no nome do registro não são afetados.