Можете да видите настройките на текущата си сесия, като направите заявка за nls_session_parameters
:
select value
from nls_session_parameters
where parameter = 'NLS_NUMERIC_CHARACTERS';
VALUE
----------------------------------------
.,
Това може да се различава от настройките по подразбиране на базата данни, които можете да видите в nls_database_parameters
.
В тази сесия грешките в заявката ви:
select to_number('100,12') from dual;
Error report -
SQL Error: ORA-01722: invalid number
01722. 00000 - "invalid number"
Мога да променя сесията си или директно с alter session
или като се уверя, че моят клиент е конфигуриран по начин, който води до настройката, от която се нуждае низът (може да бъде наследен от операционна система или локал на Java, например):
alter session set NLS_NUMERIC_CHARACTERS = ',.';
select to_number('100,12') from dual;
TO_NUMBER('100,12')
-------------------
100,12
В SQL Developer можете да зададете предпочитаната от вас стойност в Tool->Preferences->Database->NLS.
Но мога също да заменя тази настройка на сесията като част от заявката с незадължителния трети nlsparam параметър към to_number()
; въпреки че това прави незадължителния втори fmt параметърът също е необходим, така че ще трябва да можете да изберете подходящ формат:
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
По подразбиране резултатът все още се показва с настройките на моята сесия, така че десетичният разделител все още е точка.