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.