Puoi vedere le impostazioni della tua sessione corrente interrogando nls_session_parameters
:
select value
from nls_session_parameters
where parameter = 'NLS_NUMERIC_CHARACTERS';
VALUE
----------------------------------------
.,
Potrebbe differire dalle impostazioni predefinite del database, che puoi vedere in nls_database_parameters
.
In questa sessione i tuoi errori di query:
select to_number('100,12') from dual;
Error report -
SQL Error: ORA-01722: invalid number
01722. 00000 - "invalid number"
Potrei modificare la mia sessione, sia direttamente con alter session
o assicurandomi che il mio client sia configurato in un modo che porti all'impostazione necessaria alla stringa (potrebbe essere ereditata da un sistema operativo o da una locale Java, ad esempio):
alter session set NLS_NUMERIC_CHARACTERS = ',.';
select to_number('100,12') from dual;
TO_NUMBER('100,12')
-------------------
100,12
In SQL Developer puoi impostare il tuo valore preferito in Strumento->Preferenze->Database->NLS.
Ma posso anche sovrascrivere l'impostazione della sessione come parte della query, con il terzo nlsparam opzionale parametro a to_number()
; anche se questo rende il secondo fmt opzionale parametro necessario, quindi dovresti essere in grado di scegliere un formato adatto:
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
Per impostazione predefinita, il risultato viene ancora visualizzato con le impostazioni della mia sessione, quindi il separatore decimale è ancora un punto.