Especificación de la secuencia de clasificación de un idioma

Si su aplicación ordena datos que no están en inglés, debe especificar la secuencia de ordenación para asegurarse de que Db2 ordene los datos de una manera culturalmente correcta.

Por ejemplo, supongamos que sus datos contienen las siguientes cadenas: cote, coté, côte, côté. Debe especificar cómo se ordenarán estas series.

Procedimiento

Para especificar la secuencia de clasificación para un idioma, realice una de las acciones siguientes:

  • En su declaración SQL, utilice la función COLLATION_KEY con el parámetro collation-name para especificar una secuencia de clasificación concreta.

    Un nombre de ordenación especifica cómo Db2 va a ordenar los datos. Especifica atributos tales como el idioma de los datos, si debe distinguirse entre mayúsculas y minúsculas y cómo deben tratarse los signos de puntuación. Debe especificar un valor que sea aceptable para el parámetro CUNBOPR_ z/OS® _Keyword.

    La función COLLATION_KEY devuelve un valor binario que puede utilizarse para ordenar los datos de acuerdo con las reglas especificadas en el algoritmo Collation de Unicode.

    Iniciar información de la interfaz de programación de uso general.Por ejemplo, supongamos que emite la siguiente consulta:
    SELECT FIRSTNAME, LASTNAME
    FROM EMPLOYEE
    ORDER BY COLLATION_KEY(LASTNAME, 'UCA400R1_AS_LSV_S2');
    Finalizar la información de la interfaz de programación de uso general.Esta consulta ordena los empleados por su apellido (en la columna LASTNAME) basándose en las siguientes opciones que se especifican en el nombre de ordenación UCA400R1_AS_LSV_S2:
    Tabla 1. Ejemplo de opciones de clasificación y sus correspondientes palabras clave de clasificación
    Palabra clave de clasificación correspondiente Opción
    UCA400R1 Utilizar la versión 1 del algoritmo de intercalación Unicode (UCA) 4.0.1
    AS Pasar por alto los espacios, los signos de puntuación y los símbolos
    LSV Utilizar los convenios lingüísticos del sueco
    S2 Comparar sin distinguir entre mayúsculas y minúsculas
  • Cree un índice que conserve la secuencia de clasificación; para ello, utilice la función COLLATION_KEY en la sentencia CREATE INDEX.

    Si se invoca la función COLLATION_KEY para cada fila de la tabla, el rendimiento puede disminuir. La creación de un índice basado en la clave de clasificación hace que este coste de rendimiento pase de considerarse tiempo de consulta a considerarse tiempo de inserción o actualización. Este cambio de rendimiento supone que Db2 elige utilizar el índice para la consulta.

    Iniciar información de la interfaz de programación de uso general.Por ejemplo, supongamos que desea utilizar la siguiente consulta básica:
    SELECT C1 FROM T1 ORDER BY C1
    Sin embargo, desea asegurarse de que el resultado se ordenará de acuerdo con las reglas de un determinado entorno local. Para este ejemplo, supongamos que el idioma de los datos es francés. En este caso, puede utilizar la función COLLATION_KEY, como se muestra en la sentencia siguiente:
    SELECT C1 FROM T1 ORDER BY COLLATION_KEY(C1,'UCA410_LFR_FO')
    Finalizar la información de la interfaz de programación de uso general.El nombre de ordenación UCA410_LFR_FO tiene el siguiente significado:
    Tabla 2. Ejemplo de opciones de clasificación y sus correspondientes palabras clave de clasificación
    Palabra clave de clasificación correspondiente Opción
    UCA410 Especifica que Db2 debe utilizar el servicio de ordenación UCA410
    LFR Especifica que el entorno local es el francés. (L = idioma, FR= francés)
    FO Especifica que debe utilizarse el atributo de clasificación francés. (F = atributo Francés, O = On, activado.) Las series deben ordenarse examinando los acentos a partir del final de la serie. Este atributo está activado de forma automática en los entornos locales del francés. Por tanto, en este caso, no es necesario.

    Es posible que desee comprobar su puede el rendimiento de esta consulta creando un índice en C1 que esté basado en la clave de clasificación. En las siguientes sentencias de ejemplo se muestra cómo crear un índice de este tipo y utilizar sentencias EXPLAIN para confirmar que el índice se utiliza para un acceso más rápido. Puede ver los resultados de las sentencias EXPLAIN consultando la tabla de plan. La salida EXPLAIN de este ejemplo muestra solo algunas de las columnas de la tabla de plan.

    Iniciar la información de la interfaz de programación específica del programa.
    EXPLAIN ALL SET QUERYNO = 110 FOR SELECT C1 FROM T1 
       ORDER BY COLLATION_KEY(C1,'UCA410_LFR_FO');   
    CREATE INDEX I1 ON T1 (COLLATION_KEY(C1,'UCA410_LFR_FO')); 
    EXPLAIN ALL SET QUERYNO = 210 FOR SELECT C1 FROM T1 
       ORDER BY COLLATION_KEY(C1,'UCA410_LFR_FO');  
    SELECT * FROM PLAN_TABLE;                   
    Finalizar la información de la interfaz de programación específica del programa.La última sentencia devuelve la siguiente salida:
         +-----------------------------------------------------------------------------------------
         | QUERYNO | QBLOCKNO | PROGNAME | PLANNO | METHOD | CREATOR | TNAME | TABNO | ACCESSTYPE |
         +-----------------------------------------------------------------------------------------
       1_|     110 |        1 | DSNTEP2  |      1 |      0 | ADMF001 | T1    |     1 | R          |
       2_|     110 |        1 | DSNTEP2  |      2 |      3 |         |       |     0 |            |
       3_|     210 |        1 | DSNTEP2  |      1 |      0 | ADMF001 | T1    |     1 | I          |
         +-----------------------------------------------------------------------------------------
    
         --------------------------------------------------------------------------------
         | MATCHCOLS | ACCESSNAME | INDEXONLY | SORTN_UNIQ | SORTN_JOIN | SORTN_ORDERBY |
         --------------------------------------------------------------------------------
       1_|         0 |            | N         | N          | N          | N             |
       2_|         0 |            | N         | N          | N          | N             |
       3_|         0 | I1         | N         | N          | N          | N             |
         -------------------------------------------------------------------------------- 
    
         ----------------------------------------------------------------------------------------
         | SORTN_GROUPBY | SORTC_UNIQ | SORTC_JOIN | SORTC_ORDERBY | SORTC_GROUPBY | PREFETCH   |
         ---------------------------------------------------------------------------------------- 
       1_| N             | N          | N          | N             | N             |  S         |
       2_| N             | N          | N          | Y             | N             |            |
       3_| N             | N          | N          | N             | N             |            |
         ----------------------------------------------------------------------------------------