La priorité pour les paramètres de globalisation est indiquée dans la documentation. Vous définissez la priorité 4 dans cette liste, 'Spécifié dans le fichier de paramètres d'initialisation'. Vous ne définissez pas la priorité 1 ('Défini explicitement dans les fonctions SQL') et vous obtenez les résultats souhaités lorsque vous définissez la priorité 2 ('Défini par une instruction ALTER SESSION'). Par un processus d'élimination, cela indique que votre ordre 'non correct' est influencé par la priorité 3, 'Défini en tant que variable d'environnement'.
Vous pouvez vérifier les valeurs réellement utilisées par votre session avec select * from nls_session_parameters
.
La variable d'environnement NLS_SORT
n'est probablement pas définie directement; je soupçonne qu'elle est dérivée de NLS_LANGUAGE
, qui est dérivée de NLS_LANG
. Si vous ne définissez pas explicitement cela dans votre environnement d'exploitation, le client le définira en fonction du paramètre régional du système d'exploitation, en général, bien que le client exact que vous utilisez puisse faire une différence significative. Vous devrez peut-être définir explicitement une variable d'environnement NLS_COMP
, si la valeur par défaut de la base de données pour cela est vraiment remplacée.
Par exemple, SQL Developer vous permet de spécifier les paramètres NLS dans les préférences (accessibles depuis Outils->Préférences->Base de données->NLS); les valeurs par défaut semblent être basées sur les paramètres du système d'exploitation, du moins sous Windows. Pour SQL*Plus, vous devrez définir des variables d'environnement du système d'exploitation.
Cela signifie également que si vous arrivez à le faire fonctionner à un endroit - les requêtes donnent le bon ordre lorsqu'elles sont exécutées depuis SQL Developer, par exemple - elles pourraient ne pas fonctionner ailleurs, par exemple via JDBC qui a ses propres paramètres régionaux. Juste quelque chose à surveiller.
Une approche brute-force pourrait consister à ajouter les commandes alter session
à un déclencheur de connexion, mais cela ne semble pas idéal car cela masque simplement la configuration de l'environnement.