Le traitement de la case
Les opérateurs logiques de comparaison qui utilisent des expressions de types caractères sont soumis par défaut à tenir compte de majuscules/minuscules et des accents. Il est possible de s’affranchir de la sensibilité majuscules/minuscules ou des accents par la configuration de notre session. Les valeurs combinées des paramètres « NLS_COMP » et « NLS_SORT » déterminent les règles selon lesquelles les caractères sont triés et comparés.
Pour modifier les paramètres de sa propre session, vous pouvez utiliser la syntaxe suivante :
ALTER SESSION SET paramètre = valeur ;
Le paramètre « NLS_COMP » détermine la façon dont « NLS_SORT » est interprèté par les instructions SQL. Il peut avoir deux valeurs :
BINARY Tous les tris et les comparaisons sont effectués suivant les valeurs binaires des caractères de la chaîne, quelque soit la valeur fixée pour « NLS_SORT ». C'est le paramètre par défaut.
LINGUISTIC Tous les tris et les comparaisons sont effectués suivant les règles linguistiques spécifiées par le paramètre « NLS_SORT ».
Le paramètre « NLS_SORT » peut avoir plusieurs valeurs :
BINARY Tous les tris et les comparaisons sont effectués suivant les valeurs binaires des caractères de la chaîne.
langue Tous les tris et les comparaisons sont effectués suivant les règles linguistiques spécifiques à chaque langue. Vous pouvez utiliser : « FRENCH », « GERMAN », « SLOVAK », « SPANISH », « SWISS », « UNICODE_BINARY », « WEST_EUROPEAN », etc. Par défaut, le paramètre est initialisé par les options régionales du poste client.
La valeur du paramètre, qu’il s’agisse de « BINARY » ou « langue », peut comporter deux suffixes :
_CI Tous les tris et les comparaisons sont effectués sans tenir compte de la sensibilité majuscules/minuscules.
_AI Tous les tris et les comparaisons sont effectués sans tenir compte de la sensibilité majuscules/minuscules et sans la sensibilité aux accents.
Pour visualiser les deux paramètres « NLS_COMP » et « NLS_SORT », vous pouvez interroger la vue « V$NLS_PARAMETERS ».
SQL> SELECT * FROM V$NLS_PARAMETERS WHERE PARAMETER like 'NLS__O__';
PARAMETER VALUE
------------ -------------------------------------------------------
NLS_SORT BINARY_AI
NLS_COMP LINGUISTIC
La requête suivante est une sélection de la table EMPLOYES pour extraire les employés qui ont un prénom qui commence par le caractère 'R' ; les enregistrements sont tries sur le prénom. Vous pouvez remarquer que l’ordre de tri suivant les valeurs binaires des caractères de la chaîne ne correspond pas à la langue française.
SQL> ALTER SESSION SET NLS_COMP=BINARY NLS_SORT=BINARY;
SQL> SELECT PRENOM FROM EMPLOYES WHERE PRENOM LIKE 'R%' ORDER BY 1 ;
PRENOM
------------------------------
René
Renée
Robert
Régis
SQL> ALTER SESSION SET NLS_SORT=FRENCH;
SQL> SELECT PRENOM FROM EMPLOYES WHERE PRENOM LIKE 'R%' ORDER BY 1 ;
PRENOM
------------------------------
Régis
René
Renée
Robert
La requête suivante est une sélection de la table EMPLOYES pour extraire les employés qui ont un prénom qui contient le caractère 'e' et commence par 'r'.
SQL> ALTER SESSION SET NLS_COMP=LINGUISTIC NLS_SORT=BINARY;
SQL> SELECT PRENOM FROM EMPLOYES
2 WHERE PRENOM LIKE 'r%e%' ORDER BY PRENOM;
aucune ligne sélectionnée
SQL> ALTER SESSION SET NLS_SORT=BINARY_CI;
SQL> SELECT PRENOM FROM EMPLOYES
2 WHERE PRENOM LIKE 'r%e%' ORDER BY PRENOM;
PRENOM
------------------------------
René
Renée
Robert
SQL> ALTER SESSION SET NLS_SORT=BINARY_AI;
SQL> SELECT PRENOM FROM EMPLOYES
2 WHERE PRENOM LIKE 'r%e%' ORDER BY PRENOM;
PRENOM
------------------------------
Régis
René
Renée
Robert