Puede ver la configuración de su sesión actual consultando nls_session_parameters
:
select value
from nls_session_parameters
where parameter = 'NLS_NUMERIC_CHARACTERS';
VALUE
----------------------------------------
.,
Eso puede diferir de los valores predeterminados de la base de datos, que puede ver en nls_database_parameters
.
En esta sesión su consulta falla:
select to_number('100,12') from dual;
Error report -
SQL Error: ORA-01722: invalid number
01722. 00000 - "invalid number"
Podría alterar mi sesión, ya sea directamente con alter session
o asegurándome de que mi cliente esté configurado de una manera que conduzca a la configuración que necesita la cadena (puede ser heredada de un sistema operativo o configuración regional de Java, por ejemplo):
alter session set NLS_NUMERIC_CHARACTERS = ',.';
select to_number('100,12') from dual;
TO_NUMBER('100,12')
-------------------
100,12
En SQL Developer, puede establecer su valor preferido en Herramienta->Preferencias->Base de datos->NLS.
Pero también puedo anular esa configuración de sesión como parte de la consulta, con el tercer nlsparam opcional. parámetro a to_number()
; aunque eso hace que el segundo fmt sea opcional parámetro necesario también, por lo que deberá poder elegir un formato adecuado:
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
De forma predeterminada, el resultado aún se muestra con la configuración de mi sesión, por lo que el separador decimal sigue siendo un punto.