Aktuální nastavení relace můžete zobrazit dotazem nls_session_parameters
:
select value
from nls_session_parameters
where parameter = 'NLS_NUMERIC_CHARACTERS';
VALUE
----------------------------------------
.,
To se může lišit od výchozího nastavení databáze, které můžete vidět v nls_database_parameters
.
V této relaci chyby vašeho dotazu:
select to_number('100,12') from dual;
Error report -
SQL Error: ORA-01722: invalid number
01722. 00000 - "invalid number"
Svou relaci jsem mohl změnit buď přímo pomocí alter session
nebo zajištěním konfigurace mého klienta způsobem, který vede k nastavení, které řetězec potřebuje (může být například zděděno z operačního systému nebo jazyka Java):
alter session set NLS_NUMERIC_CHARACTERS = ',.';
select to_number('100,12') from dual;
TO_NUMBER('100,12')
-------------------
100,12
V SQL Developer můžete nastavit preferovanou hodnotu v Tool->Preferences->Database->NLS.
Ale mohu také přepsat toto nastavení relace jako součást dotazu s volitelným třetím nlsparam parametr na to_number()
; ačkoli to dělá volitelný druhý fmt parametr nezbytný také, takže budete muset být schopni vybrat vhodný formát:
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
Ve výchozím nastavení se výsledek stále zobrazuje s nastavením mé relace, takže oddělovač desetinných míst je stále tečka.