Oracle
 sql >> база данни >  >> RDS >> Oracle

NLS_NUMERIC_CHARACTERS настройка за десетичен знак

Можете да видите настройките на текущата си сесия, като направите заявка за 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 

По подразбиране резултатът все още се показва с настройките на моята сесия, така че десетичният разделител все още е точка.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Определете дали датата на Oracle е в уикенд?

  2. синтактична грешка при деклариране на променливи в процедура pl/sql

  3. Мога ли да копирам псевдозаписи :OLD и :NEW в/в съхранена процедура на Oracle?

  4. Как да генерирам програмно DDL от базата данни на Oracle?

  5. Задаване на изчакване на мрежата за JDBC връзка