Oracle डेटाबेस में, कुछ भिन्न NLS पैरामीटर हैं जो यह निर्धारित करते हैं कि TO_CHAR()
जैसे कार्यों का उपयोग करते समय मुद्रा कैसे प्रदर्शित होती है किसी संख्या को मुद्रा के रूप में प्रारूपित करने के लिए।
NLS_CURRENCY
L
. के लिए स्थानीय मुद्रा प्रतीक के रूप में उपयोग करने के लिए स्ट्रिंग निर्दिष्ट करता है संख्या प्रारूप तत्व।NLS_ISO_CURRENCY
निर्धारित करता है किC
. के लिए क्या उपयोग करना है प्रारूप तत्व।NLS_DUAL_CURRENCY
निर्दिष्ट करता है किU
. के लिए क्या उपयोग करना है प्रारूप तत्व।
इनके लिए डिफ़ॉल्ट मान NLS_TERRITORY
. द्वारा निर्धारित किया जाता है पैरामीटर।
आप चाहें तो इनमें से प्रत्येक पैरामीटर को अलग-अलग बदल सकते हैं, लेकिन ज्यादातर मामलों में, बेहतर होगा कि आप NLS_TERRITORY
को बदल दें। पैरामीटर। ऐसा इसलिए है, क्योंकि ऐसा करने से उस क्षेत्र के लिए अन्य सभी मुद्रा मापदंडों को उनके डिफ़ॉल्ट मानों में बदल दिया जाता है।
वर्तमान मान लौटाएं
सबसे पहले, आइए V$NLS_PARAMETERS
के बारे में पूछें यह देखने के लिए देखें कि हमारे डिफ़ॉल्ट मान क्या हैं:
SELECT
PARAMETER,
VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER IN (
'NLS_TERRITORY',
'NLS_CURRENCY',
'NLS_ISO_CURRENCY',
'NLS_DUAL_CURRENCY'
);
परिणाम:
PARAMETER VALUE ____________________ ____________ NLS_TERRITORY AUSTRALIA NLS_CURRENCY $ NLS_ISO_CURRENCY AUSTRALIA NLS_DUAL_CURRENCY $
क्षेत्र ऑस्ट्रेलिया है, और सभी मुद्रा पैरामीटर इस क्षेत्र के लिए डिफ़ॉल्ट मानों का उपयोग करते हैं।
सभी मुद्रा चिह्न बदलें
आइए NLS_TERRITORY
बदलें नए मान के लिए पैरामीटर:
ALTER SESSION SET NLS_TERRITORY = 'Denmark';
परिणाम:
Session altered.
आइए अब हमारे मुद्रा एनएलएस मापदंडों की फिर से जांच करें:
SELECT
PARAMETER,
VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER IN (
'NLS_TERRITORY',
'NLS_CURRENCY',
'NLS_ISO_CURRENCY',
'NLS_DUAL_CURRENCY'
);
परिणाम:
PARAMETER VALUE ____________________ __________ NLS_TERRITORY DENMARK NLS_CURRENCY kr NLS_ISO_CURRENCY DENMARK NLS_DUAL_CURRENCY €
NLS_ISO_CURRENCY
के संबंध में पैरामीटर, हालांकि यह निर्धारित करता है कि किस आईएसओ मुद्रा प्रतीक का उपयोग करना है, वास्तविक मुद्रा प्रतीक यहां वापस नहीं किया गया है।
निम्न उदाहरण दिखाता है कि मेरा क्या मतलब है:
SELECT
TO_CHAR(45, 'L99') AS "L",
TO_CHAR(45, 'C99') AS "C",
TO_CHAR(45, 'U99') AS "U"
FROM DUAL;
परिणाम:
L C U ________________ _____________ ______________ kr45 DKK45 €45
इसलिए, भले ही NLS_ISO_CURRENCY
पैरामीटर का मान DENMARK
. है , C
स्वरूप तत्व लौटा DKK
, जो डेनमार्क के लिए वास्तविक आईएसओ मुद्रा प्रतीक है।
मुद्रा प्रतीकों को अलग-अलग बदलें
जैसा कि उल्लेख किया गया है, आप प्रत्येक एनएलएस पैरामीटर को अलग-अलग स्पष्ट रूप से सेट कर सकते हैं।
उदाहरण के लिए, पिछले उदाहरण में क्षेत्र को डेनमार्क में सेट करने के बाद, अब हम किसी भी (या सभी) मुद्रा प्रतीकों को स्पष्ट रूप से सेट करके ओवरराइड कर सकते हैं:
ALTER SESSION SET NLS_CURRENCY = '$';
ALTER SESSION SET NLS_ISO_CURRENCY = 'AUSTRALIA';
ALTER SESSION SET NLS_DUAL_CURRENCY = '$';
परिणाम:
Session altered. Session altered. Session altered.
अब पिछले SELECT
running को चलाने पर हमें यही मिलता है कथन:
SELECT
TO_CHAR(45, 'L99') AS "L",
TO_CHAR(45, 'C99') AS "C",
TO_CHAR(45, 'U99') AS "U"
FROM DUAL;
परिणाम:
L C U ________________ _____________ ________________ $45 AUD45 $45
इसलिए, भले ही हमारा क्षेत्र डेनमार्क में बना हुआ है, हमारे मुद्रा प्रतीक एक अलग क्षेत्र (इस मामले में, ऑस्ट्रेलिया) को दर्शाते हैं।
ऐसा करते समय ध्यान रखने वाली एक बात यह है कि, आप ऐसी स्थिति में पहुंच सकते हैं जहां आपके मुद्रा पैरामीटर अन्य पैरामीटर, जैसे NLS_NUMERIC_CHARACTERS
को प्रतिबिंबित नहीं करते हैं। (जो निर्धारित करता है कि समूह विभाजक और दशमलव वर्ण के लिए कौन से वर्णों का उपयोग करना है)।
उदाहरण के लिए:
SELECT
TO_CHAR(4599.60, 'L99G999D99') AS "L",
TO_CHAR(4599.60, 'C99G999D99') AS "C",
TO_CHAR(4599.60, 'U99G999D99') AS "U"
FROM DUAL;
परिणाम:
L C U _______________________ ____________________ _______________________ $4.599,60 AUD4.599,60 $4.599,60
इस मामले में, हमारे पास ऑस्ट्रेलियाई मुद्रा प्रतीक हैं, लेकिन समूह विभाजक एक अवधि है (.
) और दशमलव वर्ण एक अल्पविराम है (,
), जो ऑस्ट्रेलियाई सम्मेलनों को नहीं दर्शाता है (यह डेनमार्क द्वारा इस्तेमाल किए गए सम्मेलन को दर्शाता है)। ऑस्ट्रेलियाई सम्मेलन दूसरा तरीका है - समूह विभाजक एक अल्पविराम है (,
) और दशमलव वर्ण एक अवधि है (.
)।
इसे स्पष्ट करने के लिए, यदि हम केवल ऑस्ट्रेलिया के क्षेत्र को रीसेट करते हैं, तो फिर से स्टेटमेंट चलाएँ:
ALTER SESSION SET NLS_TERRITORY = 'Australia';
SELECT
TO_CHAR(4599.60, 'L99G999D99') AS "L",
TO_CHAR(4599.60, 'C99G999D99') AS "C",
TO_CHAR(4599.60, 'U99G999D99') AS "U"
FROM DUAL;
परिणाम:
L C U _______________________ ____________________ _______________________ $4,599.60 AUD4,599.60 $4,599.60