A instrução REWRITE substitui logicamente um registro existente em um arquivo de acesso direto. Quando a instrução REWRITE é executada, o arquivo de acesso direto associado deve estar aberto no modo IO. Não é suportada para arquivos de seqüência de linha.
>>-REWRITE--record-name-1--+--------------------+---------------> '-FROM--identifier-1-' >--+------------------------------------------+-----------------> '-INVALID--+-----+--imperative-statement-1-' '-KEY-' >--+----------------------------------------------+-------------> '-NOT INVALID--+-----+--imperative-statement-2-' '-KEY-' >--+-------------+--------------------------------------------->< '-END-REWRITE-'
record-name-1
Deve ser o nome de um registro lógico em uma entrada FD da divisão de dados. O nome do registro pode ser qualificado.
FROM
O resultado da execução da instrução REWRITE com FROM identifier-1 frase é equivalente à execução das seguintes declarações na ordem especificada.
MOVE identifier-1 TO record-name-1. REWRITE record-name-1
O MOVE é executado de acordo com as regras para a instrução MOVE sem a frase CORRESPONDING.
identifier-1
identifier-1 pode fazer referência a um dos seguintes procedimentos:
- Uma descrição de registro para outro arquivo anteriormente aberto
- Uma função alfanumérica ou nacional
- Um item de dados definido na seção de armazenamento de trabalho, na seção de armazenamento local ou na seção de ligação
identifier-1 deve ser um item de envio válido com record-name-1 como o item de recebimento, de acordo com as regras da declaração MOVE.
identifier-1 e record-name-1 não deve se referir à mesma área de armazenamento.
Após a declaração REWRITE é executado, a informação ainda está disponível no identifier-1.
INVALID KEY
Uma condição INVALID KEY existe quando:
- O modo de acesso é sequencial 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 no prime RECORD KEY não é igual ao de qualquer registro no arquivo;
- O valor de um item de dados ALTERNATE RECORD KEY para o qual DUPLICATES não é especificado é igual ao de um registro já no arquivo.
END-REWRITE
Este 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 instrução REWRITE imperativo.
Reutilizando um registro lógico
Após a execução bem-sucedida de uma declaração REWRITE, o registo lógico não está mais disponível no record-name-1 a menos que o arquivo associado é chamado em SAME RECORD AREA.
O indicador de posição de arquivo não é afetado pela execução da instrução REWRITE.
Se a cláusula FILE STATUS for especificada na entrada de controle de arquivo, a chave de status de arquivo associada será atualizada quando a instrução REWRITE for executada.
Arquivos sequenciais
Para arquivos no modo de acesso sequencial, a última instrução de entrada / saída anterior executada para este arquivo deve ser uma instrução READ bem-sucedida. 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 em record-name-1 deve ser igual ao número de posições de caracteres no registro que está sendo substituído.
INVALID KEY não deve ser especificada para um arquivo com organização sequencial. Um procedimento EXCEPTION / ERROR pode ser especificado.
Arquivos indexados
O número de posições de caracteres em 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 é sequencial, o registro a ser substituído é especificado pelo valor contido no prime RECORD KEY. Quando a instrução REWRITE é executada, esse valor deve ser igual ao valor do item de dados da chave de registro principal no último registro lido desse arquivo.
Tanto a frase INVALID KEY como 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 tecla RECORD KEY principal.
Os valores dos itens de dados ALTERNATE RECORD KEY no registro reescrito podem diferir daqueles no registro que está sendo substituído. O sistema garante que o acesso posterior ao registro pode ser baseado em qualquer uma das chaves de registro.
Se uma condição de inválido chave existir, a execução da instrução REWRITE não for bem sucedida, a operação de atualização não ocorre, e os dados no register-name-1 não é afetada.
Arquivos relativos
O número de posições de caracteres em 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 sequencial, a frase INVALID KEY não deve ser especificada. Um procedimento EXCEPTION / ERROR 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 RELATIVE KEY. Se o arquivo não contiver o registro especificado, uma condição de chave inválida existe e, se especificada, a instrução imperativa INVALID KEY é executada. (Veja a condição de chave inválido em "instalações de processamento comuns".) A operação de actualização não ocorre, e os dados no registro de nomes não é afetado.