
🧪 Envie de pratiquer ? Exécutez les exemples de cet article dans notre SQL Playground gratuit — aucun logiciel à installer.
NLS_PARAMS Oracle : comprendre et utiliser les paramètres de localisation
La vue NLS_PARAMS est un objet Oracle essentiel pour tout développeur ou DBA travaillant dans un environnement international. Elle expose les paramètres NLS (National Language Support) actifs pour la session en cours, permettant de contrôler le format des dates, des nombres, des devises et de la langue d’affichage. Maîtriser NLS_PARAMS est indispensable dès lors que vos applications Oracle gèrent des données multilingues ou multi-régionales.
Définition et utilisation de NLS_PARAMS
La vue NLS_PARAMS — ou plus précisément NLS_SESSION_PARAMETERS dans sa forme complète — est une vue du dictionnaire de données Oracle qui retourne les paramètres NLS actifs pour la session utilisateur courante. Elle ne nécessite aucun privilège particulier pour être consultée.
Oracle propose en réalité trois vues NLS complémentaires :
NLS_SESSION_PARAMETERS: paramètres NLS de la session active (hors jeu de caractères)NLS_INSTANCE_PARAMETERS: paramètres NLS définis au niveau de l’instance OracleNLS_DATABASE_PARAMETERS: paramètres NLS définis à la création de la base de données
Dans la pratique courante, l’abréviation NLS_PARAMS désigne généralement NLS_SESSION_PARAMETERS, car c’est la vue la plus utilisée au quotidien dans les scripts SQL et les diagnostics.
Cas d’usage en entreprise
Les situations où NLS_PARAMS devient indispensable sont nombreuses :
- Applications internationales : vérifier que la session utilise les bons formats de date et de nombre selon la région de l’utilisateur (FR, US, DE…)
- Migration et intégration de données : s’assurer que les imports/exports respectent les paramètres régionaux attendus
- Débogage : diagnostiquer des erreurs de conversion de dates ou de nombres liées à des paramètres NLS incohérents entre session et base
- Conformité réglementaire : imposer un format de devise ou de séparateur décimal conforme aux normes locales
Syntaxe de NLS_SESSION_PARAMETERS
La vue NLS_SESSION_PARAMETERS (alias NLS_PARAMS) expose deux colonnes :
-- Structure de la vue NLS_SESSION_PARAMETERS
SELECT *
FROM NLS_SESSION_PARAMETERS;
| Colonne | Type | Description |
|---|---|---|
PARAMETER | VARCHAR2(30) | Nom du paramètre NLS (ex. NLS_DATE_FORMAT, NLS_LANGUAGE…) |
VALUE | VARCHAR2(64) | Valeur courante du paramètre pour la session |
Les principaux paramètres retournés sont :
NLS_LANGUAGE: langue des messages Oracle et noms de jours/moisNLS_TERRITORY: territoire définissant les conventions régionalesNLS_DATE_FORMAT: format d’affichage par défaut des datesNLS_NUMERIC_CHARACTERS: séparateurs décimal et de milliersNLS_CURRENCY: symbole monétaire localNLS_ISO_CURRENCY: code ISO de la deviseNLS_SORT: ordre de tri des chaînes de caractèresNLS_DATE_LANGUAGE: langue utilisée pour les fonctions de dateNLS_TIMESTAMP_FORMAT: format par défaut des types TIMESTAMP
Pour modifier un paramètre NLS au niveau de la session, on utilise la commande ALTER SESSION :
ALTER SESSION SET NLS_DATE_FORMAT = 'DD/MM/YYYY';
ALTER SESSION SET NLS_LANGUAGE = 'FRENCH';
ALTER SESSION SET NLS_TERRITORY = 'FRANCE';
Exemples pratiques de NLS_PARAMS
Exemple 1 — Diagnostic des paramètres NLS d’une session (contexte RH)
Contexte : Un développeur RH constate que les dates de naissance des employés s’affichent sous un format inattendu dans son rapport mensuel. Il souhaite diagnostiquer rapidement les paramètres NLS actifs de sa session.
-- Interrogation complète de NLS_SESSION_PARAMETERS
-- pour diagnostiquer les paramètres de la session courante
SELECT parameter,
value
FROM NLS_SESSION_PARAMETERS
ORDER BY parameter;
-- Résultat attendu (exemple) :
-- PARAMETER | VALUE
-- -------------------------- | --------------------
-- NLS_CALENDAR | GREGORIAN
-- NLS_COMP | BINARY
-- NLS_CURRENCY | €
-- NLS_DATE_FORMAT | DD-MON-RR
-- NLS_DATE_LANGUAGE | FRENCH
-- NLS_DUAL_CURRENCY | €
-- NLS_ISO_CURRENCY | FRANCE
-- NLS_LANGUAGE | FRENCH
-- NLS_LENGTH_SEMANTICS | BYTE
-- NLS_NCHAR_CONV_EXCP | FALSE
-- NLS_NUMERIC_CHARACTERS | ,.
-- NLS_SORT | FRENCH
-- NLS_TERRITORY | FRANCE
-- NLS_TIME_FORMAT | HH24:MI:SSXFF
-- NLS_TIMESTAMP_FORMAT | DD-MON-RR HH24:MI:SSXFF
-- NLS_TIMESTAMP_TZ_FORMAT | DD-MON-RR HH24:MI:SSXFF TZR
-- NLS_TIME_TZ_FORMAT | HH24:MI:SSXFF TZR
Le développeur identifie que NLS_DATE_FORMAT vaut DD-MON-RR alors que son application attend DD/MM/YYYY. Il corrige via ALTER SESSION.
Exemple 2 — Comparaison session / base de données (contexte Finance)
Contexte : L’équipe Finance remarque des incohérences dans le séparateur décimal entre les exports CSV produits par différents utilisateurs. L’analyste compare les paramètres NLS de la session avec ceux définis au niveau de la base pour identifier les écarts.
-- Comparaison des paramètres NLS entre la session et la base
-- Utile pour détecter des incohérences de configuration
SELECT s.parameter,
s.value AS valeur_session,
d.value AS valeur_base,
CASE
WHEN s.value != d.value THEN '⚠ DIFFÉRENT'
ELSE 'OK'
END AS statut
FROM NLS_SESSION_PARAMETERS s
JOIN NLS_DATABASE_PARAMETERS d
ON s.parameter = d.parameter
ORDER BY statut DESC, s.parameter;
-- Résultat attendu (extrait) :
-- PARAMETER | VALEUR_SESSION | VALEUR_BASE | STATUT
-- ---------------------- | -------------- | ----------- | -----------
-- NLS_NUMERIC_CHARACTERS | ., | ,. | ⚠ DIFFÉRENT
-- NLS_DATE_FORMAT | DD/MM/YYYY | DD-MON-RR | ⚠ DIFFÉRENT
-- NLS_LANGUAGE | FRENCH | FRENCH | OK
-- NLS_TERRITORY | FRANCE | FRANCE | OK
Ce rapport met en évidence que deux utilisateurs ont des NLS_NUMERIC_CHARACTERS différents, ce qui explique les incohérences dans les exports. La solution consiste à standardiser via un ALTER SESSION dans le script de connexion ou via un profil applicatif.
Erreurs courantes avec NLS_PARAMS
Erreur : ORA-01858 – Un caractère non numérique a été trouvé à la place d’un chiffre
Symptôme : Lors d’une insertion ou conversion de date, Oracle renvoie l’erreur ORA-01858 ou ORA-01861 (le masque de format ne correspond pas à la chaîne de date).
-- Erreur typique : le NLS_DATE_FORMAT de la session ne correspond
-- pas au format de la chaîne passée à TO_DATE
INSERT INTO commandes (date_commande)
VALUES (TO_DATE('15/06/2024', 'DD-MON-YYYY'));
-- ORA-01858: un caractère non numérique a été trouvé...
Cause : Le masque 'DD-MON-YYYY' attend un nom de mois abrégé (JUN) alors que la chaîne contient 06 (numérique).
Solution : Toujours utiliser un masque cohérent avec la chaîne fournie, et ne jamais dépendre implicitement du NLS_DATE_FORMAT de session :
-- Bonne pratique : masque explicite et cohérent
INSERT INTO commandes (date_commande)
VALUES (TO_DATE('15/06/2024', 'DD/MM/YYYY'));
-- ✅ Aucune erreur, indépendant des paramètres NLS de session
Résumé
| Point clé | Détail |
|---|---|
| Vue principale | NLS_SESSION_PARAMETERS (alias courant : NLS_PARAMS) |
| Vues complémentaires | NLS_INSTANCE_PARAMETERS, NLS_DATABASE_PARAMETERS |
| Colonnes exposées | PARAMETER (nom) et VALUE (valeur courante) |
| Modification de session | ALTER SESSION SET NLS_xxx = 'valeur'; |
| Portée | Session uniquement — n’affecte pas les autres utilisateurs |
| Erreur fréquente | ORA-01858 / ORA-01861 — masque de date incohérent avec NLS_DATE_FORMAT |
| Privilège requis | Aucun — accessible à tout utilisateur connecté |
✅ Bonnes pratiques Oracle
- Toujours spécifier le masque de format explicitement dans
TO_DATE(),TO_CHAR()etTO_NUMBER()pour rendre vos requêtes indépendantes des paramètres NLS_PARAMS de la session. Cela évite les comportements imprévisibles entre environnements (DEV, RECETTE, PROD). - Centraliser la configuration NLS dans le script de connexion applicatif (via un
LOGON TRIGGERou un fichier de configuration) plutôt que de laisser chaque session hériter des paramètres par défaut. Cela garantit la cohérence des traitements de données dans toute l’application.
Aller plus loin
Pour approfondir votre maîtrise de l’environnement Oracle et des fonctions liées à la gestion des données localisées, nous vous recommandons les sujets suivants :
- La fonction TO_DATE en Oracle SQL — Apprenez à convertir des chaînes en dates en maîtrisant les masques de format et leur interaction avec les paramètres NLS.
- La fonction TO_CHAR en Oracle SQL — Découvrez comment formater dates, nombres et devises en chaînes lisibles, en tenant compte des paramètres NLS de session.
- La commande ALTER SESSION en Oracle SQL — Maîtrisez la modification des paramètres de session, dont les paramètres NLS, pour adapter le comportement d’Oracle à votre contexte métier.
Sur le même thème
- GROUP BY en SQL Oracle : Guide Complet et Exemples
- SELECT en SQL Oracle : syntaxe et exemples pratiques
- UPDATE en SQL Oracle : modifier des données facilement
- INSERT en SQL Oracle : syntaxe, exemples et bonnes pratiques
- MERGE Oracle SQL : Syntaxe, Exemples et Bonnes Pratiques
- TRUNCATE en Oracle SQL : Guide complet et pratique
