Możesz zobaczyć swoje bieżące ustawienia sesji, pytając nls_session_parameters
:
select value
from nls_session_parameters
where parameter = 'NLS_NUMERIC_CHARACTERS';
VALUE
----------------------------------------
.,
To może różnić się od wartości domyślnych bazy danych, które można zobaczyć w nls_database_parameters
.
W tej sesji Twoje błędy zapytań:
select to_number('100,12') from dual;
Error report -
SQL Error: ORA-01722: invalid number
01722. 00000 - "invalid number"
Mogę zmienić moją sesję, bezpośrednio za pomocą alter session
lub upewniając się, że mój klient jest skonfigurowany w sposób, który prowadzi do ustawienia potrzeb (może być dziedziczony z systemu operacyjnego lub ustawień regionalnych Javy na przykład):
alter session set NLS_NUMERIC_CHARACTERS = ',.';
select to_number('100,12') from dual;
TO_NUMBER('100,12')
-------------------
100,12
W SQL Developer możesz ustawić preferowaną wartość w Tool->Preferences->Database->NLS.
Ale mogę również zastąpić to ustawienie sesji jako część zapytania, opcjonalnym trzecim nlparam parametr do to_number()
; choć to sprawia, że opcjonalny drugi fmt parametr jest również niezbędny, więc musisz być w stanie wybrać odpowiedni format:
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
Domyślnie wynik jest nadal wyświetlany z ustawieniami mojej sesji, więc separatorem dziesiętnym jest nadal kropka.