Oracle
 sql >> Base de données >  >> RDS >> Oracle

Paramètre NLS_NUMERIC_CHARACTERS pour décimal

Vous pouvez voir vos paramètres de session actuels en interrogeant nls_session_parameters :

select value
from nls_session_parameters
where parameter = 'NLS_NUMERIC_CHARACTERS';

VALUE                                  
----------------------------------------
.,                                       

Cela peut différer des valeurs par défaut de la base de données, que vous pouvez voir dans nls_database_parameters .

Dans cette session, vos erreurs de requête :

select to_number('100,12') from dual;

Error report -
SQL Error: ORA-01722: invalid number
01722. 00000 -  "invalid number"

Je pourrais modifier ma session, soit directement avec alter session ou en s'assurant que mon client est configuré d'une manière qui mène au réglage dont la chaîne a besoin (elle peut être héritée d'un système d'exploitation ou de paramètres régionaux Java, par exemple) :

alter session set NLS_NUMERIC_CHARACTERS = ',.';
select to_number('100,12') from dual;

TO_NUMBER('100,12')
-------------------
             100,12 

Dans SQL Developer, vous pouvez définir votre valeur préférée dans Tool->Preferences->Database->NLS.

Mais je peux également remplacer ce paramètre de session dans le cadre de la requête, avec le troisième facultatif nlsparam paramètre à to_number(); bien que cela rende le deuxième fmt facultatif paramètre nécessaire également, vous devez donc pouvoir choisir un format approprié :

alter session set NLS_NUMERIC_CHARACTERS = '.,';
select to_number('100,12', '99999D99', 'NLS_NUMERIC_CHARACTERS='',.''')
from dual;

TO_NUMBER('100,12','99999D99','NLS_NUMERIC_CHARACTERS='',.''')
--------------------------------------------------------------
                                                        100.12 

Par défaut, le résultat est toujours affiché avec mes paramètres de session, donc le séparateur décimal est toujours un point.