A declaração SORT aceita registros de um ou mais arquivos, classifica-los de acordo com as chaves especificadas e torna os registros classificados disponíveis através de um procedimento de saída ou em um arquivo de saída. A declaração SORT pode aparecer em qualquer lugar na divisão de procedimento, exceto na parte declarativa.
A instrução SORT não é suportada para programas compilados com a opção THREAD.
>>-SORT--file-name-1--------------------------------------------> .--------------------------------------------------. | .-------------. | V V | | >----+----+--+-ASCENDING--+--+-----+----data-name-1-+-+---------> '-ON-' '-DESCENDING-' '-KEY-' >--+-----------------------------------------+------------------> '-+------+--DUPLICATES--+----+--+-------+-' '-WITH-' '-IN-' '-ORDER-' >--+---------------------------------------------------+--------> '-+-----------+--SEQUENCE--+----+-- alphabet-name-1-' '-COLLATING-' '-IS-' .-------------. V | >--+-USING----file-name-2-+-------------------------------------------------------+--> '-INPUT PROCEDURE--+----+--procedure-name-1--+-------------------------------+-' '-IS-' '-+-THROUGH-+--procedure-name-2-' '-THRU----' .-------------. V | >--+-GIVING----file-name-3-+-------------------------------------------------------+->< '-OUTPUT PROCEDURE--+----+--procedure-name-3--+-------------------------------+-' '-IS-' '-+-THROUGH-+--procedure-name-4-' '-THRU----'
file-name-1
O nome dado na entrada SD que descreve os registros a serem classificados.
Nenhum par de nomes de arquivos em uma instrução SORT pode ser especificado na mesma cláusula SAME SORT AREA ou na mesma cláusula SORT-MERGE AREA.
Nomes de arquivos associados com a cláusula GIVING (file-name-3) não pode ser especificada na cláusula SAME AREA;
No entanto, eles podem ser associados com a cláusula SAME RECORD AREA.
ASCENDING KEY e DESCENDING KEY
Esta frase especifica que os registros devem ser processados em seqüência ascendente ou descendente (dependendo da frase especificada), com base nas chaves de classificação especificadas.
data-name-1
Especifica um item de dados KEY no qual a instrução SORT será baseada. Cada um desses-nome de dados deve identificar um item de dados em um registro associado com file-name-1. Os nomes de dados que seguem a palavra KEY são listados da esquerda para a direita na instrução SORT em ordem decrescente de significado, sem levar em conta como eles são divididos em frases KEY. O nome de dados mais à esquerda é a chave principal, o próximo nome de dados é a próxima chave mais significativa, e assim por diante. Aplicam-se as seguintes regras:
- Um item de dados KEY 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 file-name-1 tem mais de uma descrição de registro, os itens de dados-chave precisam ser descrita em apenas uma das descrições recordes.
- Se file-name-1 contém registros de comprimento variável, todos os dados-itens chave deve ser contido dentro dos primeiros n posições de caracteres do registro, onde n é igual ao tamanho registros mínimos especificados para file-name-1.
- Os itens de dados KEY não devem conter uma cláusula OCCURS ou ser subordinados a um item que contém uma cláusula OCCURS.
- Os itens de dados KEY não podem ser:
- Localização variável
- Agrupar itens que contêm itens de dados de ocorrência variável
- Categoria numérica descrita com uso NACIONAL (item decimal nacional)
- Categoria ponto flutuante externo descrito com uso NACIONAL (ponto flutuante nacional)
- Categoria DBCS
- Os itens de dados CHAVE podem ser qualificados.
- Os itens de dados CHAVE podem ser qualquer uma das seguintes categorias de dados:
- Alfabético, alfanumérico, alfanumérico-editado
- Numérico (exceto numérico com uso NACIONAL)
- Numérico-editado (com uso DISPLAY ou NACIONAL)
- Ponto flutuante interno ou ponto flutuante de exibição
- Nacional ou nacional-editado
- Os itens de dados-chave podem ser campos de data com janelas, nas seguintes condições:
- A frase GIVING não deve especificar um arquivo indexado, porque a ordenação (binária) assumida ou imposta pelo sistema de arquivos está em conflito com a ordenação de datas com janelas fornecida na saída de ordenação. A tentativa de gravar a saída de mesclagem de data com janelas para um arquivo indexado desse tipo falhará ou reiniciará a ordenação binária, dependendo de como o arquivo é acessado (o ACCESS MODE na entrada de controle de arquivo).
- Se um campo de data com janelas alfanuméricas for especificado como uma KEY para uma instrução SORT, a seqüência de agrupamento em vigor para a operação de mesclagem deve ser EBCDIC. Assim, a COLLATING SEQUENCE da instrução SORT ou, se esta frase não for especificada, qualquer cláusula PROGRAM SEQUENCE COLLATING no parágrafo OBJECT-COMPUTER não deve especificar uma seqüência de agrupamento diferente de EBCDIC ou NATIVE.
Se a instrução SORT atende a essas condições, a operação de classificação tira proveito dos recursos SORT Year 2000, desde que o ambiente de execução inclua um produto de classificação que ofereça suporte a janela do século.
Um campo de data com janelas de último ano pode ser especificado como uma KEY para uma instrução SORT e pode, desse modo, explorar a capacidade de janela correspondente do produto de classificação.
Se file-name-3 faz referência a um arquivo indexado, a primeira especificação de data-name-1 deve ser associado a uma frase ascendente e o item de dados referenciado por esse data-name-1 deve ocupar as mesmas posições de caracteres neste registro como a Item de dados associado à chave de registro principal desse arquivo.
A direção da operação de classificação depende da especificação das palavras-chave ASCENDING ou DESCENDING da seguinte maneira:
- Quando ASCENDING é especificado, a seqüência é do menor valor de chave para o valor de chave mais alto.
- Quando DESCENDING é especificado, a seqüência é do valor chave mais alto para o menor.
- Se o item de dados KEY é descrito com o uso NATIONAL, a seqüência dos valores KEY é baseada nos valores binários dos caracteres nacionais.
- Se o item de dados KEY for ponto flutuante interno, a seqüência de valores-chave será em ordem numérica.
- Quando COLLATING SEQUENCE não é especificada, as comparações de chaves são realizadas de acordo com as regras para comparação de operando em uma condição de relação.
- Quando COLLATING SEQUENCE é especificada, a seqüência de agrupamento indicada é usada para itens de dados chave de categorias alfabéticas, alfanuméricas, editadas alfa numericamente, de ponto flutuante externo e de edição numérica. Para todos os outros itens de dados chave, as comparações são realizadas de acordo com as regras para comparação de operando em uma condição de relação.
DUPLICATES
Se a frase DUPLICATES for especificada e o conteúdo de todos os elementos-chave associados a um registro forem iguais aos elementos-chave correspondentes em um ou mais outros registros, a ordem de retorno desses registros é a seguinte:
- A ordem dos arquivos de entrada associados, conforme especificado na instrução SORT. Dentro de um determinado arquivo, a ordem é aquela em que os registros são acessados a partir desse arquivo.
- A ordem pela qual esses registros são liberados por um procedimento de entrada, quando um procedimento de entrada é especificado.
Se a frase DUPLICATES não for especificada, a ordem desses registros é indefinida. Para mais informações sobre o uso da frase DUPLICATES,
COLLATING SEQUENCE
Esta frase especifica a seqüência de agrupamento a ser usada em comparações alfanuméricas para os itens de dados KEY nesta operação de classificação.
A COLLATING SEQUENCE não tem efeito para as chaves que não são alfabética ou alfanumérica.
alphabet-name-1
Deve ser especificado na cláusula ALPHABET do parágrafo SPECIAL-NAMES. alfabeto-nome-1 pode ser associada com qualquer uma das frases cláusula alfabeto, com os seguintes resultados:
STANDARD-1
A sequência de agrupamento ASCII é usada para todas as comparações alfanuméricas.
STANDARD-2
A versão internacional de referência do ISO / IEC 646, 7-bit conjunto de caracteres codificados para intercâmbio de processamento de informação é usado para todas as comparações alfanuméricos.
NATIVE
A sequência de agrupamento EBCDIC é utilizada para todas as comparações alfanuméricas.
EBCDIC
A sequência de agrupamento EBCDIC é utilizada para todas as comparações alfanuméricas.
literal
A seqüência de agrupamento estabelecida pela especificação de literais na cláusula de nome do alfabeto é usada para todas as comparações alfanuméricas.
Quando COLLATING SEQUENCE for omitida, a cláusula PROGRAM COLLATING SEQUENCE (se especificada) no parágrafo OBJECT-COMPUTER especifica a seqüência de agrupamento a ser usada. Quando ambos COLLATING SEQUENCE e a PROGRAM COLLATING SEQUENCE de ordenação são omitidos, a sequência de agrupamento EBCDIC é usado.
USING
file-name-2
Os arquivos de entrada.
Quando USING for especificado, todos os registros no file-name-2, ..., (ou seja, os arquivos de entrada) são transferidas automaticamente para o file-name-1. No momento em que a instrução SORT é executada, esses arquivos não devem estar abertos. O compilador abre, lê, disponibiliza registros e fecha esses arquivos automaticamente. Se EXCEPTION/ERROR procedimentos são especificados para esses arquivos, o compilador faz a ligação necessária a esses procedimentos.
Todos os arquivos de entrada devem ser descritos em entradas FD na divisão de dados.
Se USING é especificado e se file-name-1 contém registros de comprimento variável, o tamanho dos registros contidos nos arquivos de entrada (file-name-2, ...) não deve ser nem menos do que o menor registro nem superior que o maior registro descrito para file-name-1. Se file-name-1 contém registros de comprimento fixo, o tamanho dos registros contidos nos arquivos de entrada não deve ser maior que o maior registro descrito para file-name-1.
INPUT PROCEDURE
Esta frase especifica o nome de um procedimento que deve selecionar ou modificar registros de entrada antes que a operação de classificação comece.
procedure-name-1
Especifica a primeira (ou única) seção ou parágrafo no procedimento de entrada.
procedure-name-2
Identifica a última seção ou parágrafo do procedimento de entrada.
O procedimento de entrada pode consistir em qualquer procedimento necessário para selecionar, modificar ou copiar os registros que são feitos um disponível de cada vez pela instrução RELEASE para o arquivo referenciado por file-name-1. O intervalo inclui todas as instruções que são 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 entrada, bem como todas as declarações em procedimentos declarativos que são executadas como resultado da execução de instruções na faixa do procedimento de entrada. O intervalo do procedimento de entrada não deve causar a execução de qualquer instrução MERGE, RETURN ou SORT.
Se um procedimento de entrada é especificado, o controle é passado para o procedimento de entrada antes que o arquivo referenciado por file-name-1 é sequenciado pela instrução SORT. O compilador insere um mecanismo de retorno no final da última instrução no procedimento de entrada. Quando o controle passa a última instrução no procedimento de entrada, os registros que foram lançados para o arquivo referenciado por file-name-1 são classificadas.
GIVING
file-name-3, ...
Os arquivos de saída.
Quando GIVING é especificado, todos os registros selecionados no file-name-1 são automaticamente transferidos para os arquivos de saída (file-name-3, ...).
Todos os arquivos de saída devem ser descritos em entradas FD na divisão de dados.
Se os arquivos de saída (file-name-3, ...) contêm registros de comprimento variável, o tamanho dos registros contidos no file-name-1 não deve ser nem menos do que o menor registro nem maior que o maior registro descrito para a Arquivos de saída. Se os arquivos de saída contêm registros de comprimento fixo, o tamanho dos registros contidos no file-name-1 não deve ser maior que o maior registro descrito para os arquivos de saída.
Na época, a declaração SORT é executado, os arquivos de saída (file-name-3, ...) não devem estar abertas. Para cada um dos arquivos de saída, a execução da instrução SORT faz com que as seguintes ações sejam tomadas:
- O processamento do arquivo é iniciado. A iniciação é executada como se uma instrução OPEN com a frase OUTPUT tivesse sido executada.
- Os registros lógicos classificados são retornados e gravados no arquivo. Cada registro é escrito como se uma instrução WRITE sem quaisquer frases opcionais tivesse sido executada.
Para um arquivo relativo, o item de dados de chave relativo para o primeiro registro retornado contém o valor '1'; Para o segundo registro retornado, o valor '2'. Após a execução da instrução SORT, o conteúdo do item de dados de chave relativo indica o último registro retornado para o arquivo.
- O processamento do arquivo é encerrado. A terminação é executada como se uma instrução CLOSE sem frases opcionais tivesse sido executada.
Essas funções implícitas são executadas de tal forma que qualquer procedimento associado USE AFTER EXCEPTION/ERROR é executado; No entanto, a execução de tal procedimento de uso não deve causar a execução de qualquer declaração manipular o arquivo referenciado por, ou acessar a área de registro associado com, file-name-3. Na primeira tentativa de escrever para além dos limites definidos externamente do arquivo, qualquer procedimento USE AFTER STANDARD EXCEPTION/ERROR especificado para o arquivo é executado. Se o controle for retornado desse procedimento USE ou se nenhum procedimento USE for especificado, o processamento do arquivo será encerrado.
OUTPUT PROCEDURE
Esta frase especifica o nome de um procedimento que deve selecionar ou modificar registros de saída da operação de classificação.
procedure-name-3
Especifica a primeira (ou única) seção ou parágrafo no procedimento de saída.
procedure-name-4
Identifica a última seção ou parágrafo do procedimento de saída.
O procedimento de saída pode consistir em qualquer procedimento necessário para selecionar, modificar ou copiar os registros que são feitos um disponível de cada vez, a declaração RETURN na ordem de classificação do arquivo referenciado por file-name-1. O intervalo inclui todas as instruções que são executadas como resultado de uma transferência de controlo 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 declarações em 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 qualquer declaração MERGE, RELEASE ou SORT.
Se um procedimento de saída é especificado, o controle passa a ele após o arquivo referenciado por file-name-1 foi sequenciado pela instrução SORT. 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 a terminação do tipo e, em seguida, passa o controle para a próxima instrução executável após o SORT declaração. Antes de entrar no procedimento de saída, o procedimento de ordenação atinge um ponto no qual ele pode selecionar o próximo registro na ordem ordenada quando solicitado. As instruções RETURN no procedimento de saída são as solicitações para o próximo registro.
INPUT PROCEDURE e OUTPU PROCEDURE são semelhantes às de uma instrução PERFORM básica. Por exemplo, se você nomear um procedimento em um procedimento de saída, esse procedimento será executado durante a operação de classificação, como se fosse nomeado em uma instrução PERFORM. Tal como com a instrução PERFORM, a execução do procedimento é terminada após a última instrução concluir a execução. A última declaração em um procedimento de entrada ou saída pode ser a instrução EXIT.
SORT - Registros especiais
Os registradores especiais, SORT-CORE-SIZE, SORT-MESSAGE e SORT-MODE-SIZE, são equivalentes a palavras-chave de instruções de controle de opção no arquivo de controle de classificação. Você define o conjunto de dados de controle de classificação com o registro especial SORT-CONTROL.
Notas:
Se você usar um arquivo de controle de classificação para especificar instruções de controle, os valores especificados no arquivo de controle tipo prevalecem sobre as do registo especial.
Se uma instrução SORT é codificada em um segmento fixo, qualquer procedimento de entrada ou saída referenciado por essa instrução SORT deve estar totalmente dentro de um segmento fixo ou totalmente contido em um único segmento independente.
Se uma instrução SORT é codificada em um segmento independente, qualquer procedimento de entrada ou saída referenciado por essa declaração SORT deve estar totalmente dentro de um segmento fixo ou totalmente contido dentro do mesmo segmento independente que declaração SORT.