Anda dapat melihat setelan sesi Anda saat ini dengan menanyakan nls_session_parameters
:
select value
from nls_session_parameters
where parameter = 'NLS_NUMERIC_CHARACTERS';
VALUE
----------------------------------------
.,
Itu mungkin berbeda dari default database, yang dapat Anda lihat di nls_database_parameters
.
Dalam sesi ini kesalahan kueri Anda:
select to_number('100,12') from dual;
Error report -
SQL Error: ORA-01722: invalid number
01722. 00000 - "invalid number"
Saya dapat mengubah sesi saya, baik secara langsung dengan alter session
atau dengan memastikan klien saya dikonfigurasi dengan cara yang mengarah ke pengaturan yang dibutuhkan string (mungkin diwarisi dari sistem operasi atau lokal Java, misalnya):
alter session set NLS_NUMERIC_CHARACTERS = ',.';
select to_number('100,12') from dual;
TO_NUMBER('100,12')
-------------------
100,12
Di SQL Developer, Anda dapat menyetel nilai pilihan Anda di Tool->Preferences->Database->NLS.
Tetapi saya juga dapat mengganti pengaturan sesi itu sebagai bagian dari kueri, dengan opsi nlsparam ketiga opsional parameter ke to_number()
; meskipun itu membuat pilihan kedua fmt parameter yang diperlukan juga, jadi Anda harus dapat memilih format yang sesuai:
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
Secara default hasilnya masih ditampilkan dengan pengaturan sesi saya, jadi pemisah desimal masih berupa titik.