आप 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
. के साथ या यह सुनिश्चित करके कि मेरे क्लाइंट को इस तरह से कॉन्फ़िगर किया गया है जिससे स्ट्रिंग की जरूरतें पूरी हो जाती हैं (उदाहरण के लिए, इसे ऑपरेटिंग सिस्टम या जावा लोकेल से इनहेरिट किया जा सकता है):
alter session set NLS_NUMERIC_CHARACTERS = ',.';
select to_number('100,12') from dual;
TO_NUMBER('100,12')
-------------------
100,12
SQL डेवलपर में आप 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
डिफ़ॉल्ट रूप से परिणाम अभी भी मेरी सत्र सेटिंग्स के साथ प्रदर्शित होता है, इसलिए दशमलव विभाजक अभी भी एक अवधि है।