Enterprise COBOL for z/OS, V4.2, Language Reference
A instrução MERGE combina dois ou mais arquivos sequenciados de forma idêntica (ou seja, arquivos que já foram classificados de acordo com um conjunto idêntico de
chaves ascendentes ou descendentes) em uma ou mais chaves e disponibiliza registros em ordem mesclada a um procedimento de saída ou arquivo de saída.
Uma instrução MERGE pode aparecer em qualquer lugar da PROCEDURE DIVISION, exceto em uma seção declarativa.
A instrução MERGE não é suportada para programas compilados com a opção do compilador THREAD.
- file-name-1
- O nome fornecido na entrada SD que descreve os registros a serem mesclados.
Nenhum nome de arquivo pode ser repetido na instrução MERGE.
Nenhum par de file-names em uma instrução MERGE pode ser especificado na mesma cláusula SAME AREA, SAME SORT AREA ou SAME SORT-MERGE AREA.
No entanto, qualquer nome de arquivo na instrução MERGE pode ser especificado na mesma cláusula SAME RECORD AREA.
Quando a instrução MERGE é executada, todos os registros contidos em file-name-2, file-name-3, ..., são aceitos pelo programa de mesclagem e mesclados de acordo
com as chaves especificadas.
ASCENDING/DESCENDING KEY phrase
Esta frase especifica que os registros devem ser processados em uma sequência ascendente ou descendente (dependendo da frase especificada), com base nas chaves
de mesclagem especificadas.
- data-name-1
- Especifica um item de dados KEY no qual a mesclagem será baseada.
Cada data-name deve identificar um item de dados em um registro associado ao file-name-1.
Os data-names após a palavra KEY são listados da esquerda para a direita na instrução MERGE em ordem decrescente, sem levar em consideração como eles são
divididos em KEY phrases.
O data-names mais à esquerda é a chave principal, o próximo nome de dados é a próxima chave mais significativa e assim por diante.
As seguintes regras se aplicam:
- Um item de dados-chave específico deve estar fisicamente localizado na mesma posição e ter o mesmo formato de dados em cada arquivo de entrada.
No entanto, ele não precisa ter o mesmo nome de dados.
- Se o file-name-1 tiver mais de uma descrição de registro, os itens de dados KEY precisarão ser descritos em apenas uma das descrições de registro.
- Se o file-name-1 contiver registros de tamanho variável, todos os itens de dados KEY deverão estar contidos nas primeiras n posições de caracteres do registro,
em que n será igual ao tamanho mínimo dos registros especificado para o file-name-1.
- Os itens de dados KEY não devem conter uma cláusula OCCURS ou estar subordinados a um item que contém uma cláusula OCCURS.
- Itens de dados KEY não podem ser:
- Localmente variável
- Itens de grupo que contêm itens de dados de ocorrência variável
- Categoria numérica descrita com o uso NACIONAL (tipo decimal nacional)
- Categoria ponto flutuante externo descrito com o uso NATIONAL (ponto flutuante nacional)
- Categoria DBCS
- Itens elementares de comprimento dinâmico
- Itens de grupo de comprimento dinâmico
- KEY - Os principais itens de dados podem ser qualificados.
- KEY - Os principais itens de dados podem ser qualquer uma das seguintes categorias de dados:
- Alphabetic, alphanumeric, alphanumeric-edited
- Numeric (exceto numérico com uso NATIONAL)
- Numeric-edited (com o uso DISPLAY ou NATIONAL)
- Internal floating-point ou display floating-point
- National oo national-edited
A direção da operação de mesclagem depende da especificação das palavras-chave ASCENDING ou DESCENDING da seguinte maneira:
- Quando ASCENDING é especificado, a sequência passa do valor mais baixo para o valor mais alto.
- Quando DESCENDING é especificado, a sequência passa do valor mais alto da chave para o valor mais baixo da chave.
Se o item de dados KEY for descrito com o uso NATIONAL, a sequência dos valores KEY será baseada nos valores binários dos caracteres nacionais.
Quando a frase COLLATING SEQUENCE não é especificada, as principais comparações são executadas de acordo com as regras para comparação de operandos em uma
condição de relação.
Para detalhes, consulte General relation conditions.
Quando a frase COLLATING SEQUENCE é especificada, a sequência de intercalação indicada é usada para os principais itens de dados das categorias alfabética,
alfanumérica, editada alfanumérica, ponto flutuante externo e editada numérica.
Para todos os outros itens de dados importantes, as comparações são realizadas de acordo com as regras para comparação de operandos em uma condição de relação.
COLLATING SEQUENCE phrase
Esta frase especifica a sequência de intercalação a ser usada em comparações alfanuméricas para os itens de dados KEY nesta operação de mesclagem.
A frase COLLATING SEQUENCE não tem efeito para chaves que não são alfabéticas ou alfanuméricas.
- alphabet-name-1
- Deve ser especificado na cláusula ALPHABET do parágrafo SPECIAL-NAMES.
Qualquer uma das frases da cláusula do alphabet-name pode ser especificada, com os seguintes resultados:
- STANDARD-1
- A sequência de intercalação ASCII é usada para todas as comparações alfanuméricas.
- STANDARD-2
- O código de 7 bits definido na Versão de Referência Internacional da ISO/IEC 646, conjunto de caracteres codificados em 7 bits para troca de informações,
é usado para todas as comparações alfanuméricas.
- NATIVE
- A sequência de intercalação EBCDIC é usada para todas as comparações alfanuméricas.
- EBCDIC
- A sequência de intercalação EBCDIC é usada para todas as comparações alfanuméricas.
- literal
- A sequência de intercalação estabelecida pela especificação de literais na cláusula ALPHABET-NAME é usada para todas as comparações alfanuméricas.
Quando a frase COLLATING SEQUENCE é omitida, a cláusula PROGRAM COLLATING SEQUENCE (se especificada) no parágrafo OBJECT-COMPUTER identifica a sequência de
intercalação a ser usada.
Quando a frase COLLATING SEQUENCE da instrução MERGE e a cláusula PROGRAM COLLATING SEQUENCE do parágrafo OBJECT-COMPUTER são omitidas, a sequência de intercalação
EBCDIC é usada.
USING phrase
- file-name-2 , file-name-3 , ...
- Especifica os arquivos de entrada.
Durante a operação MERGE, todos os registros em file-name-2, file-name-3, ... (ou seja, os arquivos de entrada) são transferidos para o file-name-1.
No momento em que a instrução MERGE é executada, esses arquivos não devem estar abertos.
Os arquivos de entrada são automaticamente abertos, lidos e fechados.
Se procedimentos DECLARATIVE forem especificados para esses arquivos para operações de entrada, os declarativos serão direcionados a erros se ocorrerem erros.
Todos os arquivos de entrada devem especificar o modo de acesso seqüencial ou dinâmico e ser descritos nas entradas FD na DATA DIVISION.
Se o file-name-1 contiver registros de tamanho variável, o tamanho dos registros contidos nos arquivos de entrada (file-name-2, file-name-3, ...) não deverá ser
menor que o menor e nem maior que o maior registro descrito para o file-name-1.
Se o file-name-1 contiver registros de tamanho fixo, o tamanho dos registros contidos nos arquivos de entrada não deverá ser maior que o maior registro descrito
para o file-name-1.
GIVING phrase
- file-name-4 , ...
- Especifica os arquivos de saída.
Quando a frase GIVING é especificada, todos os registros mesclados em file-name-1 são automaticamente transferidos para os arquivos de saída (file-name-4, ...).
Todos os arquivos de saída devem especificar o modo de acesso seqüencial ou dinâmico e ser descritos nas entradas FD na DATA DIVISION.
Se os arquivos de saída (file-name-4, ...) contiverem registros de tamanho variável, o tamanho dos registros contidos no file-name-1 não deverá ser menor que o
menor registro nem maior que o maior registro descrito para o arquivo arquivos de saída.
Se os arquivos de saída contiverem registros de tamanho fixo, o tamanho dos registros contidos no file-name-1 não deverá ser maior que o maior registro descrito
para os arquivos de saída.
No momento em que a instrução MERGE é executada, os arquivos de saída (file-name-4, ...) não devem estar abertos.
Os arquivos de saída são abertos, gravados e fechados automaticamente.
Se procedimentos DECLARATIVE forem especificados para esses arquivos para operações de saída, os declarativos serão direcionados a erros se ocorrerem erros.
OUTPUT PROCEDURE phrase
Esta frase especifica o nome de um procedimento que deve selecionar ou modificar registros de saída da operação de mesclagem.
- procedure-name-1
- Especifica a primeira (ou única) seção ou parágrafo no OUTPUT PROCEDURE.
procedure-name-2
- Identifica a última seção ou parágrafo do OUTPUT PROCEDURE.
O OUTPUT PROCEDURE pode consistir em qualquer procedimento necessário para selecionar, modificar ou copiar os registros disponibilizados um por vez pela instrução
RETURN na ordem mesclada do arquivo referenciado por file-name-1.
O intervalo inclui todas as instruções executadas como resultado de uma transferência de controle pelas instruções CALL, EXIT, GO TO, PERFORM e XML PARSE no
intervalo do procedimento de saída.
O intervalo também inclui todas as instruções nos procedimentos declarativos que são executados como resultado da execução de instruções no intervalo do
procedimento de saída.
O intervalo do procedimento de saída não deve causar a execução de nenhuma instrução MERGE, RELEASE ou formato 1 SORT.
Se um procedimento de saída for especificado, o controle passará para ele após o arquivo referenciado por file-name-1 ter sido sequenciado pela instrução MERGE.
O compilador insere um mecanismo de retorno no final da última instrução no procedimento de saída e, quando o controle passa a última instrução no procedimento de
saída, o mecanismo de retorno fornece o término da mesclagem e passa o controle para a próxima instrução executável após o MERGE declaração. Antes de entrar no
procedimento de saída, o procedimento de mesclagem atinge um ponto no qual ele pode selecionar o próximo registro na ordem mesclada, quando solicitado.
As instruções RETURN no procedimento de saída são as solicitações para o próximo registro.
A frase OUTPUT PROCEDURE é semelhante a uma instrução PERFORM básica.
Por exemplo, se você nomear um procedimento em um OUTPUT PROCEDURE, esse procedimento será executado durante a operação de mesclagem, como se tivesse sido nomeado
em uma instrução PERFORM.
Como na instrução PERFORM, a execução do procedimento é encerrada após a última instrução concluir a execução.
A última instrução em um OUTPUT PROCEDURE pode ser a instrução EXIT.
© Copyright IBM Corp.