sentencia SORT
La sentencia SORT hace que un conjunto de registros o elementos de tabla se ordenen en una secuencia especificada por el usuario.
Para ordenar archivos, la sentencia SORT acepta registros de uno o más archivos, los ordena según las claves especificadas y hace que los registros ordenados estén disponibles a través de un procedimiento de salida o en un archivo de salida.
Para ordenar tablas, la sentencia SORT ordena los elementos de tabla según las claves de tabla especificadas.
Las sentencias SORT de formato 1 pueden aparecer en cualquier lugar de PROCEDURE DIVISION excepto en la parte declarativa. Véase también la sentencia MERGE.
Las sentencias SORT de formato 2 pueden aparecer en cualquier lugar de PROCEDURE DIVISION.
- file-name-1
- El nombre proporcionado en la entrada SD que describe los registros que se van a ordenar.
No se puede especificar ningún par de nombres de archivo en una sentencia SORT en la misma cláusula SAME SORT AREA o en la cláusula SAME SORT-MERGE AREA. Nombres de archivo asociados con la cláusula CEDER (file-name-3, ...) no se puede especificar en la cláusula SAME AREA; sin embargo, se pueden asociar con la cláusula SAME RECORD AREA.
- data-name-2
- Especifica un nombre de datos de tabla que está sujeto a las reglas siguientes:
- data-name-2 debe tener una cláusula OCCURS en la entrada de descripción de datos.
- data-name-2 puede calificarse.
- data-name-2 puede tener un subíndice. El subíndice más a la derecha o sólo el subíndice de la tabla debe omitirse o sustituirse por la palabra ALL.
El número de apariciones de elementos de tabla a los que hace referencia data-name-2 lo determinan las reglas de la cláusula OCCURS. Los elementos de tabla ordenados se colocan en la misma tabla a la que hace referencia data-name-2.
Frases ASCENDING KEY y DESCENDING KEY (formato 1)
Esta frase especifica que los registros deben procesarse en secuencia ascendente o descendente (en función de la frase especificada), basándose en las teclas de ordenación especificadas.
- data-name-1
- Especifica un elemento de datos KEY en el que se basará la sentencia SORT. Cada nombre de datos de este tipo debe identificar un elemento de datos en un registro asociado con file-name-1. Los nombres de datos que siguen a la palabra KEY se listan de izquierda a derecha en la sentencia SORT en orden de significación decreciente sin tener en cuenta cómo se dividen en frases KEY. El nombre de datos más a la izquierda es la clave principal, el siguiente nombre de datos es la siguiente clave más significativa, y así sucesivamente. Se aplican las siguientes normas:
- Un elemento de datos KEY específico debe estar ubicado físicamente en la misma posición y tener el mismo formato de datos en cada archivo de entrada. Sin embargo, no es necesario que tenga el mismo nombre de datos.
- Si file-name-1 tiene más de una descripción de registro, los elementos de datos KEY sólo se deben describir en una de las descripciones de registro.
- Si file-name-1 contiene registros de longitud variable, todos los elementos de datos KEY deben estar contenidos en las primeras n posiciones de caracteres del registro, donde n es igual al tamaño mínimo de registros especificado para file-name-1.
- Los elementos de datos KEY no deben contener una cláusula OCCURS o estar subordinados a un elemento que contenga una cláusula OCCURS.
- Los elementos de datos KEY no pueden ser:
- Ubicado de forma variable
- Elementos de grupo que contienen elementos de datos de aparición variable
- Campos de fecha con ventana
- Numérico de categoría descrito con uso NACIONAL (elemento decimal nacional)
- Categoría de coma flotante externa descrita con uso NATIONAL (elemento de coma flotante nacional)
- Categoría DBCS
- Los elementos de datos KEY pueden calificarse.
- Los elementos de datos KEY pueden pertenecer a cualquiera de las siguientes categorías de datos:
- Alfabético, alfanumérico, alfanumérico-editado
- Numérico (excepto numérico con uso NACIONAL)
- Numérico editado (con uso DISPLAY o NATIONAL)
- Coma flotante interna o visualizar coma flotante
- Nacional o editado a nivel nacional cuando la opción de compilador NCOLLSEQ (BINARY) está en vigor. La secuencia de clasificación binaria se aplica a las claves nacionales.
Si file-name-3 hace referencia a un archivo indexado cuya clave de registro principal no es un record-key-name, la primera especificación de data-name-1 debe estar asociada a una frase ASCENDING y el elemento de datos referenciado por ese data-name-1 debe ocupar las mismas posiciones de caracteres en este registro que el elemento de datos asociado a la clave de registro principal para ese archivo.
Si file-name-3 hace referencia a un archivo indexado cuya clave de registro principal es un record-key-name, debe especificar un data-name-1 correspondiente para cada nombre de datos en la frase SOURCE de record-key-name. Cada data-name-1 debe estar asociado con una frase ASCENDING, y cada data-name-1 debe ocupar las mismas posiciones de caracteres que el nombre de datos correspondiente en la frase SOURCE.
Para más información sobre record-key-name, véase el párrafo FILE-CONTROL.
La dirección de la operación de clasificación depende de la especificación de las palabras clave ASCENDING o DESCENDING como se indica a continuación:
- Cuando se especifica ASCENDING, la secuencia va del valor de clave más bajo al valor de clave más alto.
- Cuando se especifica DESCENDING, la secuencia va del valor de clave más alto al más bajo.
- Si el elemento de datos KEY es alfabético, alfanumérico, alfanumérico editado o numérico editado, la secuencia de valores de clave depende de la secuencia de clasificación utilizada (consulte COLLATING SEQUENCE frase (ambos formatos)).
- Si el elemento de datos KEY se describe con el uso NATIONAL, la secuencia de los valores KEY se basa en los valores binarios de los caracteres nacionales.
- Si la KEY es un elemento de coma flotante de visualización, el compilador trata el elemento de datos como datos de tipo carácter del mismo tamaño que la clave, en lugar de como datos numéricos. La secuencia en la que se ordenan los registros depende del orden de clasificación utilizado.
- Si el elemento de datos KEY es de coma flotante interna, la secuencia de valores de clave estará en orden numérico.
- Cuando no se especifica la frase COLLATING SEQUENCE, las comparaciones de claves se realizan de acuerdo con las reglas para la comparación de operandos en una condición de relación. Véanse las condiciones generales de la relación.
- Cuando se especifica la frase COLLATING SEQUENCE, la secuencia de clasificación indicada se utiliza para elementos de datos clave de categorías alfabéticas, alfanuméricas, editadas alfanuméricas, de coma flotante externa y editadas numéricas. Para todos los demás elementos de datos clave, las comparaciones se realizan de acuerdo con las reglas para la comparación de operandos en una condición de relación.
Frases ASCENDING KEY y DESCENDING KEY (formato 2)
Esta frase especifica que los elementos de tabla deben procesarse en secuencia ascendente o descendente, basándose en la frase y las teclas de ordenación especificadas.
- data-name-1
- Especifica un nombre de datos KEY que está sujeto a las reglas siguientes:
- El elemento de datos identificado por un nombre de datos clave debe ser el mismo que el elemento de datos al que hace referencia data-name-2, o estar subordinado al mismo.
- Los elementos de datos KEY pueden calificarse.
- Los elementos de datos KEY pueden pertenecer a cualquiera de las siguientes categorías de datos:
- Alfabético, alfanumérico, alfanumérico-editado
- Numérico (excepto numérico con uso NACIONAL)
- Numérico editado (con uso DISPLAY o NATIONAL)
- Coma flotante interna o visualizar coma flotante
- Nacional o nacional-editado
- Los elementos de datos KEY no pueden ser:
- Ubicado de forma variable
- Elementos de grupo que contienen elementos de datos de aparición variable
- Número de categoría que se describe con el uso NATIONAL (elemento decimal nacional)
- Categoría de coma flotante externa que se describe con el uso NATIONAL (elemento de coma flotante nacional)
- Categoría DBCS
- Puntero de clase
- USAGE POINTER, USAGE PROCEDURE-POINTER o USAGE FUNCTION-POINTER
- subindexado
- Si el elemento de datos identificado por un nombre de datos KEY está subordinado a data-name-2, se aplican las reglas siguientes:
- El elemento de datos no se puede describir con una cláusula OCCURS.
- El elemento de datos no puede estar subordinado a una entrada que también está subordinada a data-name-2 y que contiene una cláusula OCCURS.
La frase KEY sólo se puede omitir si la descripción de la tabla a la que hace referencia data-name-2 contiene una frase KEY.
Las palabras ASCENDING y DESCENDING son transitivas entre todas las apariciones de data-name-1 hasta que se encuentra otra palabra ASCENDING o DESCENDING.
Los elementos de datos a los que hace referencia data-name-1 son elementos de datos clave, y estos elementos de datos determinan el orden en el que se almacenan los elementos de tabla ordenados. El orden de significación de las claves es el orden en el que se especifican los elementos de datos en la sentencia SORT, sin tener en cuenta la asociación con frases ASCENDING o DESCENDING.
La sentencia SORT ordena la tabla a la que hace referencia data-name-2 y presenta la tabla ordenada en data-name-2. El orden de clasificación viene determinado por las frases ASCENDING y DESCENDING (si se ha especificado), o por la frase KEY asociada con data-name-2.
- Cuando se especifica ASCENDING, la secuencia va del valor de clave más bajo al más alto.
- Cuando se especifica DESCENDING, la secuencia va del valor de clave más alto al más bajo.
- Si el elemento de datos KEY se describe con el uso NATIONAL, la secuencia de los valores KEY se basa en los valores binarios de los caracteres nacionales.
- Si el elemento de datos KEY es de coma flotante interna, la secuencia de valores de clave está en el orden numérico.
- Cuando no se especifica la frase COLLATING SEQUENCE, la secuencia EBCDIC se utiliza para elementos de datos clave de categorías alfabéticas, alfanuméricas, editadas alfanuméricas, de coma flotante externa y editadas numéricas. Para todos los demás elementos de datos clave, las comparaciones se realizan de acuerdo con las reglas para la comparación de operandos en una condición de relación.
- Cuando se especifica la frase COLLATING SEQUENCE, la secuencia de clasificación indicada se utiliza para elementos de datos clave de categorías alfabéticas, alfanuméricas, editadas alfanuméricas, de coma flotante externa y editadas numéricas. Para todos los demás elementos de datos clave, las comparaciones se realizan de acuerdo con las reglas para la comparación de operandos en una condición de relación.
- Si el contenido de los elementos de datos clave correspondientes no es igual y la clave está asociada con la frase ASCENDING, el elemento de tabla que contiene el elemento de datos clave con el valor inferior tiene el número de aparición inferior.
- Si el contenido de los elementos de datos clave correspondientes no es igual y la clave está asociada con la frase DESCENDING, el elemento de tabla que contiene el elemento de datos clave con el valor más alto tiene el número de aparición más bajo.
- Si el contenido de los elementos de datos clave correspondientes es igual, la determinación se basa en el contenido del siguiente elemento de datos clave más significativo.
Si no se especifica la frase KEY, la secuencia viene determinada por la frase KEY de la entrada de descripción de datos de la tabla a la que hace referencia data-name-2.
Si se especifica la frase KEY, altera temporalmente cualquier frase KEY especificada en la entrada de descripción de datos de la tabla a la que hace referencia data-name-2.
Si se omite data-name-1 , el elemento de datos al que hace referencia data-name-2 es el elemento de datos clave.
Frase DUPLICATES (formato 1)
Si se especifica la frase DUPLICATES y el contenido de todos los elementos clave asociados a un registro es igual a los elementos clave correspondientes en uno o más registros, el orden de devolución de estos registros es el siguiente:
- El orden de los archivos de entrada asociados tal como se especifica en la sentencia SORT. Dentro de un archivo determinado, el orden es aquel en el que se accede a los registros desde ese archivo.
- El orden en el que un procedimiento de entrada libera estos registros, cuando se especifica un procedimiento de entrada.
Si no se especifica la frase DUPLICATES, el orden de estos registros no está definido.
Frase DUPLICATES (formato 2)
- Se ha especificado la frase DUPLICATES.
- El contenido de todos los elementos de datos clave que están asociados con un elemento de tabla es igual al contenido de los elementos de datos clave correspondientes que están asociados con uno o más elementos de tabla.
Si no se especifica la frase DUPLICATES y existe la segunda condición, el orden relativo del contenido de estos elementos de tabla no está definido.
Frase COLLATING SEQUENCE (ambos formatos)
Esta frase especifica el orden de clasificación que se utilizará en las comparaciones alfanuméricas para los elementos de datos KEY en esta operación de clasificación.
La frase COLLATING SEQUENCE no tiene ningún efecto para las claves que no son alfabéticas o alfanuméricas.
La frase COLLATING SEQUENCE sólo es válida cuando está en vigor una página de códigos ASCII de un solo byte.
- alphabet-name-1
- Debe especificarse en la cláusula ALPHABET del párrafo SPECIAL-NAMES. alphabet-name-1 se puede asociar con cualquiera de las frases de la cláusula ALPHABET, con los resultados siguientes:
- STANDARD-1
- La secuencia de clasificación se basa en el orden de los valores hexadecimales del carácter.
- STANDARD-2
- La secuencia de clasificación se basa en el orden de los valores hexadecimales del carácter.
- Nativo
- Se selecciona el orden de clasificación indicado por el entorno local.
- EBCDIC
- La secuencia de clasificación EBCDIC se utiliza para todas las comparaciones alfanuméricas. (La secuencia de clasificación EBCDIC se muestra en Secuencias de clasificación EBCDIC y ASCII.)
- literal
- La secuencia de clasificación establecida por la especificación de literales en la cláusula de nombre de alfabeto se utiliza para todas las comparaciones alfanuméricas.
Cuando se omite la frase COLLATING SEQUENCE, la cláusula PROGRAM COLLATING SEQUENCE (si se especifica) en el párrafo OBJECT-COMPUTER especifica el orden de clasificación que debe utilizarse. Cuando se omiten la frase COLLATING SEQUENCE y la cláusula PROGRAM COLLATING SEQUENCE, se utiliza la secuencia de clasificación indicada por la opción de compilador COLLSEQ.
frase USING
- file-name-2 , ...
- Los archivos de entrada.
Cuando se especifica la frase USING, todos los registros de file-name-2, ..., (es decir, los archivos de entrada) se transfieren automáticamente a file-name-1. En el momento en que se ejecuta la sentencia SORT, estos archivos no deben estar abiertos. El compilador abre, lee, pone los registros a disposición y cierra estos archivos automáticamente. Si se especifican procedimientos EXCEPTION/ERROR para estos archivos, el compilador establece el enlace necesario con estos procedimientos.
Todos los archivos de entrada deben describirse en entradas FD en DATA DIVISION.
Si se especifica la frase USING y si file-name-1 contiene registros de longitud variable, el tamaño de los registros contenidos en los archivos de entrada (file-name-2, ...) no debe ser menor que el registro más pequeño ni mayor que el registro más grande descrito para file-name-1. Si file-name-1 contiene registros de longitud fija, el tamaño de los registros contenidos en los archivos de entrada no debe ser mayor que el registro más grande descrito para file-name-1. Para obtener más información, consulte Descripción de la entrada para ordenar o fusionar en la publicación COBOL for Linux® on x86 Programming Guide.
Frase INPUT PROCEDURE
Esta frase especifica el nombre de un procedimiento que debe seleccionar o modificar registros de entrada antes de que comience la operación de clasificación.
- procedure-name-1
- Especifica la primera (o única) sección o párrafo en el procedimiento de entrada.
- procedure-name-2
- Identifica la última sección o párrafo del procedimiento de entrada.
El procedimiento de entrada puede consistir en cualquier procedimiento necesario para seleccionar, modificar o copiar los registros que la sentencia RELEASE pone a disposición de uno en uno en el archivo al que hace referencia file-name-1. El rango incluye todas las sentencias que se ejecutan como resultado de una transferencia de control mediante sentencias CALL, EXIT, GO TO, PERFORM y XML PARSE en el rango del procedimiento de entrada, así como todas las sentencias en procedimientos declarativos que se ejecutan como resultado de la ejecución de sentencias en el rango del procedimiento de entrada. El rango del procedimiento de entrada no debe provocar la ejecución de ninguna sentencia MERGE, RETURN o format 1 SORT.
Si se especifica un procedimiento de entrada, el control se pasa al procedimiento de entrada antes de que la sentencia SORT secuencie el archivo al que hace referencia file-name-1 . El compilador inserta un mecanismo de retorno al final de la última sentencia en el procedimiento de entrada. Cuando el control pasa la última sentencia en el procedimiento de entrada, los registros que se han liberado en el archivo al que hace referencia file-name-1 se ordenan.
Frase CEDER
- file-name-3 , ...
- Los archivos de salida.
Cuando se especifica la frase CEDER, todos los registros ordenados en file-name-1 se transfieren automáticamente a los archivos de salida (file-name-3, ...).
Todos los archivos de salida deben describirse en entradas FD en DATA DIVISION.
Si los archivos de salida (file-name-3, ...) contienen registros de longitud variable, el tamaño de los registros contenidos en file-name-1 no debe ser menor que el registro más pequeño ni mayor que el registro más grande descrito para los archivos de salida. Si los archivos de salida contienen registros de longitud fija, el tamaño de los registros contenidos en file-name-1 no debe ser mayor que el registro más grande descrito para los archivos de salida. Para obtener más información, consulte Descripción de la salida de la ordenación o fusión en la publicación COBOL for Linux on x86 Programming Guide.
En el momento en que se ejecuta la sentencia SORT, los archivos de salida (file-name-3, ...) no debe estar abierto. Para cada uno de los archivos de salida, la ejecución de la sentencia SORT hace que se realicen las acciones siguientes:
- Se inicia el proceso del archivo. La iniciación se realiza como si se hubiera ejecutado una sentencia OPEN con la frase OUTPUT.
- Los registros lógicos ordenados se devuelven y se graban en el archivo. Cada registro se escribe como si se hubiera ejecutado una sentencia WRITE sin ninguna frase opcional.
Para un archivo relativo, el elemento de datos de clave relativa para el primer registro devuelto contiene el valor '1'; para el segundo registro devuelto, el valor '2'. Después de la ejecución de la sentencia SORT, el contenido del elemento de datos de clave relativa indica el último registro devuelto al archivo.
- El proceso del archivo ha terminado. La terminación se realiza como si se hubiera ejecutado una sentencia CLOSE sin frases opcionales.
Estas funciones implícitas se realizan de tal forma que se ejecuten los procedimientos USE AFTER EXCEPTION/ERROR asociados; sin embargo, la ejecución de dicho procedimiento USE no debe provocar la ejecución de ninguna sentencia que manipule el archivo referenciado por, o que acceda al área de registro asociada con, file-name-3. En el primer intento de grabar más allá de los límites definidos externamente del archivo, se ejecuta cualquier procedimiento USE AFTER STANDARD EXCEPTION/ERROR especificado para el archivo. Si se devuelve el control desde ese procedimiento USE o si no se especifica dicho procedimiento USE, se termina el proceso del archivo.
Frase OUTPUT PROCEDURE
Esta frase especifica el nombre de un procedimiento que debe seleccionar o modificar registros de salida de la operación de ordenación.
- procedure-name-3
- Especifica la primera (o única) sección o párrafo en el procedimiento de salida.
- procedure-name-4
- Identifica la última sección o párrafo del procedimiento de salida.
El procedimiento de salida puede consistir en cualquier procedimiento necesario para seleccionar, modificar o copiar los registros que la sentencia RETURN pone a disposición de uno en uno en orden de clasificación desde el archivo al que hace referencia file-name-1. El rango incluye todas las sentencias que se ejecutan como resultado de una transferencia de control por parte de las sentencias CALL, EXIT, GO TO, PERFORM y XML PARSE en el rango del procedimiento de salida. El rango también incluye todas las sentencias en procedimientos declarativos que se ejecutan como resultado de la ejecución de sentencias en el rango del procedimiento de salida. El rango del procedimiento de salida no debe provocar la ejecución de ninguna sentencia SORT MERGE, RELEASE o format 1 .
Si se especifica un procedimiento de salida, el control lo pasa después de que la sentencia SORT haya secuenciado el archivo al que hace referencia file-name-1 . El compilador inserta un mecanismo de retorno al final de la última sentencia en el procedimiento de salida y cuando el control pasa la última sentencia en el procedimiento de salida, el mecanismo de retorno proporciona la terminación de la clasificación y luego pasa el control a la siguiente sentencia ejecutable después de la sentencia SORT. Antes de entrar en el procedimiento de salida, el procedimiento de clasificación alcanza un punto en el que puede seleccionar el siguiente registro en orden ordenado cuando se le solicite. Las sentencias RETURN en el procedimiento de salida son las peticiones para el siguiente registro.
Las frases INPUT PROCEDURE y OUTPUT PROCEDURE son similares a las de una sentencia PERFORM básica. Por ejemplo, si nombra un procedimiento en un procedimiento de salida, dicho procedimiento se ejecuta durante la operación de clasificación como si se nombrara en una sentencia PERFORM. Al igual que con la sentencia PERFORM, la ejecución del procedimiento se termina después de que la última sentencia complete la ejecución. La última sentencia de un procedimiento de entrada o salida puede ser la sentencia EXIT (véase Sentencia EXIT ).
