रूपांतरण कार्यों का उपयोग करना
SQL उपयोगिता फ़ंक्शंस के अलावा, Oracle इनबिल्ट फ़ंक्शन लाइब्रेरी में टाइप रूपांतरण फ़ंक्शंस होते हैं। ऐसे परिदृश्य हो सकते हैं जहां क्वेरी विशिष्ट डेटा प्रकार में इनपुट की अपेक्षा करती है, लेकिन यह इसे एक अलग डेटा प्रकार में प्राप्त करता है। ऐसे मामलों में, ओरेकल स्पष्ट रूप से अप्रत्याशित मूल्य को एक संगत डेटा प्रकार में बदलने की कोशिश करता है जिसे स्थान पर प्रतिस्थापित किया जा सकता है और आवेदन निरंतरता से समझौता नहीं किया जाता है। प्रकार का रूपांतरण या तो ऑरेकल द्वारा किया जा सकता है या प्रोग्रामर द्वारा स्पष्ट रूप से किया जा सकता है।
मैट्रिक्स के आधार पर अंतर्निहित डेटा प्रकार रूपांतरण कार्य करता है जो आंतरिक प्रकार की कास्टिंग के लिए Oracle के समर्थन को प्रदर्शित करता है। इन नियमों के अलावा, Oracle रूपांतरण प्रकार प्रदान करता है जिसका उपयोग स्पष्ट रूपांतरण और स्वरूपण के लिए प्रश्नों में किया जा सकता है। तथ्य की बात के रूप में, यह सॉफ्टवेयर खुफिया पर भरोसा करने के बजाय स्पष्ट रूपांतरण करने के लिए अनुशंसित है। हालांकि अंतर्निहित रूपांतरण अच्छी तरह से काम करता है, लेकिन तिरछा संभावना को खत्म करने के लिए जहां खराब इनपुट आंतरिक रूप से टाइपकास्ट करना मुश्किल हो सकता है।
निहित डेटा प्रकार रूपांतरण
VARCHAR2 या CHAR मान को Oracle द्वारा NUMBER या DATE प्रकार के मान में परिवर्तित किया जा सकता है। इसी तरह, Oracle सर्वर द्वारा एक NUMBER या DATA प्रकार मान को स्वचालित रूप से वर्ण डेटा में परिवर्तित किया जा सकता है। ध्यान दें कि स्पष्ट इंटरकनेक्टेशन केवल तब होता है जब चरित्र क्रमशः एक मान्य संख्या या दिनांक प्रकार मान का प्रतिनिधित्व करता है।
उदाहरण के लिए, नीचे चयनित प्रश्नों की जांच करें। दोनों प्रश्न समान परिणाम देंगे क्योंकि Oracle आंतरिक रूप से 15000 और '15000' को समान रूप से मानता है।
क्वेरी-1
SELECT employee_id,first_name,salary
FROM employees
WHERE salary > 15000;
क्वेरी-2
SELECT employee_id,first_name,salary
FROM employees
WHERE salary > '15000';
स्पष्ट डेटा प्रकार रूपांतरण
SQL रूपांतरण फ़ंक्शन एकल पंक्ति फ़ंक्शन हैं जो कॉलम मान, शाब्दिक या एक अभिव्यक्ति टाइपकास्टिंग करने में सक्षम हैं। TO_CHAR, TO_NUMBER और TO_DATE तीन कार्य हैं जो डेटा प्रकारों के क्रॉस संशोधन करते हैं।
TO_CHAR फ़ंक्शन
TO_CHAR फ़ंक्शन का उपयोग प्रारूप मॉडल (वैकल्पिक) के साथ वर्ण प्रकार के लिए संख्यात्मक या दिनांक इनपुट टाइप करने के लिए किया जाता है।
वाक्य - विन्यास
TO_CHAR(number1, [format], [nls_parameter])
वर्ण रूपांतरण की संख्या के लिए, दशमलव पैरामीटर, समूह विभाजक, स्थानीय मुद्रा मॉडल या अंतर्राष्ट्रीय मुद्रा मॉडल को निर्दिष्ट करने के लिए nls पैरामीटर का उपयोग किया जा सकता है। यह एक वैकल्पिक विनिर्देश है - यदि उपलब्ध नहीं है, तो सत्र स्तर के nls सेटिंग्स का उपयोग किया जाएगा। चरित्र रूपांतरण की तारीख के लिए, nls पैरामीटर का उपयोग दिन और महीने के नामों को निर्दिष्ट करने के लिए किया जा सकता है, जैसा कि लागू है।
TO_CHAR फ़ंक्शन का उपयोग करके वर्ण प्रकारों में कनवर्ट करने के बाद तिथियों को कई स्वरूपों में स्वरूपित किया जा सकता है। TO_CHAR फ़ंक्शन का उपयोग किसी विशेष प्रारूप में Oracle 11g प्रदर्शन तिथियों के लिए किया जाता है। प्रारूप मॉडल केस संवेदी होते हैं और इन्हें एकल उद्धरणों में संलग्न किया जाना चाहिए।
नीचे चयनित क्वेरी पर विचार करें। TO_CHAR फ़ंक्शन का उपयोग करके ERELOYEES तालिका के HIRE_DATE और SALARY कॉलम का क्वेरी प्रारूप।
SELECT first_name,
TO_CHAR (hire_date, 'MONTH DD, YYYY') HIRE_DATE,
TO_CHAR (salary, '$99999.99') Salary
FROM employees
WHERE rownum < 5;
FIRST_NAME HIRE_DATE SALARY
-------------------- ------------------ ----------
Steven JUNE 17, 2003 $24000.00
Neena SEPTEMBER 21, 2005 $17000.00
Lex JANUARY 13, 2001 $17000.00
Alexander JANUARY 03, 2006 $9000.00
पहले TO_CHAR का उपयोग किराए की तारीख को तारीख प्रारूप में परिवर्तित करने के लिए किया जाता है, MOND DD, YYYY यानी महीने को वर्तनी और रिक्त स्थान के साथ रखा जाता है, इसके बाद महीने के दो-अंकीय दिन और फिर चार अंकों का वर्ष होता है। यदि आप मिश्रित मामले में महीने का नाम प्रदर्शित करना पसंद करते हैं (जो कि "दिसंबर") है, तो बस इस मामले को प्रारूप तर्क में उपयोग करें: ('मंथ डीडी, येवाय')।
चित्रा 10-39 में दूसरे TO_CHAR फ़ंक्शन का उपयोग मुद्रा चिन्ह और दो दशमलव पदों को प्रदर्शित करने के लिए सैलरी को प्रारूपित करने के लिए किया जाता है।
ओरेकल प्रारूप मॉडल का व्यापक सेट प्रदान करता है। नीचे दी गई तालिका प्रारूप मॉडल की सूची को दिखाती है जिसका उपयोग TO_CHAR का उपयोग करके दिनांक और संख्या मान टाइप करने के लिए किया जा सकता है।
प्रारूप मॉडल | विवरण |
---|---|
,(अल्पविराम) | यह निर्दिष्ट स्थिति में अल्पविराम लौटाता है। आप एक संख्या प्रारूप मॉडल में कई अल्पविराम निर्दिष्ट कर सकते हैं। प्रतिबंध: एक अल्पविराम तत्व संख्या स्वरूप मॉडल शुरू नहीं कर सकता है। एक अल्पविराम किसी दशमलव चरित्र या संख्या स्वरूप मॉडल की अवधि के दाईं ओर दिखाई नहीं दे सकता है। |
।(अवधि) | एक दशमलव बिंदु लौटाता है, जो निर्दिष्ट स्थिति में एक अवधि (।) है। प्रतिबंध: आप एक संख्या प्रारूप मॉडल में केवल एक अवधि निर्दिष्ट कर सकते हैं |
$ | एक प्रमुख डॉलर चिह्न के साथ मूल्य लौटाता है |
0 | अग्रणी शून्य देता है। शून्य को पीछे छोड़ता है। |
9 | यदि सकारात्मक हो या ऋणात्मक हो तो एक अग्रणी स्थान के साथ एक प्रमुख स्थान के साथ अंकों की निर्दिष्ट संख्या के साथ रिटर्न देता है। शून्य मान को छोड़कर अग्रणी शून्य रिक्त हैं, जो निश्चित-बिंदु संख्या के पूर्णांक भाग के लिए एक शून्य लौटाता है। |
ख | पूर्णांक संख्या शून्य होने पर पूर्णांक भाग के लिए रिक्त स्थान देता है जब पूर्णांक भाग शून्य होता है (प्रारूप मॉडल में "0" की परवाह किए बिना)। |
सी | आईएसओ मुद्रा प्रतीक (NLS_ISO_CURRENCY पैरामीटर का वर्तमान मूल्य) निर्दिष्ट स्थिति में वापस आता है। |
घ | निर्दिष्ट वर्ण स्थिति में लौटाता है, जो NLS_NUMERIC_CHARACTER पैरामीटर का वर्तमान मान है। डिफ़ॉल्ट एक अवधि (।) है। प्रतिबंध: आप एक प्रारूप प्रारूप में केवल एक दशमलव वर्ण निर्दिष्ट कर सकते हैं। |
EEE | वैज्ञानिक संकेतन में उपयोग करके एक मान लौटाता है। |
एफएम | बिना किसी प्रमुख या अनुगामी खाली के एक मान लौटाता है। |
जी | समूह विभाजक (NLS_NUMERIC_CHARACTER पैरामीटर का वर्तमान मान) निर्दिष्ट स्थिति में वापस आता है। आप एक संख्या प्रारूप मॉडल में कई समूह विभाजक निर्दिष्ट कर सकते हैं। प्रतिबंध: एक समूह विभाजक संख्या स्वरूप मॉडल में दशमलव वर्ण या अवधि के दाईं ओर दिखाई नहीं दे सकता है |
एल | स्थानीय मुद्रा प्रतीक (NLS_CURRENCY पैरामीटर का वर्तमान मूल्य) निर्दिष्ट स्थिति में वापस आता है। |
एमआई | पीछे चल रहे ऋण चिह्न (-) के साथ ऋणात्मक मान लौटाता है। अनुगामी रिक्त के साथ सकारात्मक मान लौटाता है। प्रतिबंध: एमआई प्रारूप तत्व केवल संख्या प्रारूप मॉडल की अंतिम स्थिति में दिखाई दे सकता है। |
जनसंपर्क | में नकारात्मक मान लौटाता है। यह केवल एक संख्या प्रारूप मॉडल के अंत में दिखाई दे सकता है। |
आर एन, rm | अपरकेस में रोमन अंकों के रूप में एक मान लौटाता है। लोअरकेस में रोमन अंकों के रूप में एक मान लौटाता है। मान 1 और 3999 के बीच पूर्णांक हो सकता है। |
रों | एक अग्रणी या अनुगामी ऋण चिह्न (-) के साथ ऋणात्मक मान लौटाता है। एक अग्रणी या अनुगामी प्लस चिह्न (+) के साथ सकारात्मक मान लौटाता है। प्रतिबंध: एस प्रारूप तत्व केवल संख्या प्रारूप मॉडल की पहली या अंतिम स्थिति में दिखाई दे सकता है। |
टीएम | "पाठ न्यूनतम"। रिटर्न (दशमलव आउटपुट में) संभव वर्णों की सबसे छोटी संख्या। यह तत्व केस-असंवेदनशील है। |
यू | निर्दिष्ट स्थिति में "यूरो" (या अन्य) दोहरी मुद्रा प्रतीक (NLS_DUAL_CURRENCY पैरामीटर का वर्तमान मूल्य) देता है। |
वी | एक मान को 10n से गुणा करता है (और यदि आवश्यक हो, तो इसे गोल करें), जहां n "9" के बाद 9 की संख्या है। |
एक्स | निर्दिष्ट अंकों की हेक्साडेसिमल मान लौटाता है। |
TO_NUMBER फ़ंक्शन
TO_NUMBER फ़ंक्शन एक वर्ण मान को एक संख्यात्मक डेटाटाइप में परिवर्तित करता है। यदि स्ट्रिंग में परिवर्तित किया जा रहा है गैर-वर्ण वर्ण हैं, तो फ़ंक्शन त्रुटि देता है।
वाक्य - विन्यास
TO_NUMBER (string1, [format], [nls_parameter])
नीचे दी गई तालिका प्रारूप मॉडल की सूची को दर्शाती है जो कि TO_NUMBER का उपयोग करके वर्ण मानों को टाइपकास्ट करने के लिए उपयोग किया जा सकता है।
प्रारूप मॉडल | विवरण |
---|---|
सीसी | सदी |
एस सी सी | सदी ईसा पूर्व के साथ उपसर्ग - |
YYYY | 4 नंबर के साथ वर्ष |
SYYY | वर्ष ईसा पूर्व के साथ उपसर्ग - |
IYYY | आईएसओ संख्या 4 संख्याओं के साथ |
Y Y | 2 नंबर के साथ वर्ष |
आरआर | Y2k संगतता के साथ 2 नंबर के साथ वर्ष |
साल | पात्रों में वर्ष |
SYEAR | पात्रों में वर्ष, ई.पू. के साथ उपसर्ग - |
ईसा पूर्व | ईसा पूर्व / ईस्वी संकेतक |
क्यू | संख्या में तिमाही (1,2,3,4) |
मिमी | वर्ष का महीना 01, 02 ... 12 |
महीना | पात्रों में महीना (अर्थात जनवरी) |
सोमवार | जन, एफईबी |
WW | सप्ताह की संख्या (अर्थात 1) |
डब्ल्यू | महीने की साप्ताहिक संख्या (यानी 5) |
आईडब्ल्यू | आईएसओ मानक में वर्ष की साप्ताहिक संख्या। |
DDD | संख्या में वर्ष का दिन (अर्थात 365) |
डीडी | संख्याओं में महीने का दिन (अर्थात 28) |
घ | संख्याओं में सप्ताह का दिन (अर्थात 7) |
दिन | सप्ताह का दिन वर्णों में (अर्थात सोमवार) |
FMDAY | सप्ताह का दिन वर्णों में (अर्थात सोमवार) |
डीवाई | लघु चरित्र विवरण में सप्ताह का दिन (अर्थात सूर्य) |
जे | जूलियन डे (जनवरी 1 4713 ईसा पूर्व के बाद से दिनों की संख्या, जहां 1 जनवरी 1347 ईसा पूर्व ओरेकल में 1 है) |
एचएच, H12 | दिन की संख्या (1-12) |
HH24 | 24 घंटे संकेतन (0-23) के साथ दिन की संख्या |
दोपहर से पूर्व दोपहर के बाद | पूर्वाह्न या अपराह्न |
कुमारी | मिनट और सेकंड की संख्या (यानी 59), |
Sssss | इस दिन सेकंड की संख्या। |
डी एस | लघु तिथि प्रारूप। एनएलएस-सेटिंग्स पर निर्भर करता है। टाइमस्टैम्प के साथ ही उपयोग करें। |
डेली | लंबी तारीख का प्रारूप। एनएलएस-सेटिंग्स पर निर्भर करता है। टाइमस्टैम्प के साथ ही उपयोग करें। |
इ | संक्षिप्त युग का नाम। केवल कैलेंडर के लिए मान्य: जापानी इंपीरियल, आरओसी अधिकारी, थाई बुद्ध। |
ईई | पूर्ण युग का नाम |
सीमांत बल | आंशिक सेकंड। टाइमस्टैम्प के साथ प्रयोग करें। |
FF1..FF9 | आंशिक सेकंड। टाइमस्टैम्प के साथ प्रयोग करें। अंक भिन्नात्मक सेकंड के लिए उपयोग किए जाने वाले दशमलव अंकों की संख्या को नियंत्रित करता है। |
एफएम | भरण मोड: रूपांतरण से आउटपुट में रिक्तता को दबाता है |
FX | प्रारूप सटीक: डेटा और प्रारूप मॉडल के बीच सटीक पैटर्न मिलान की आवश्यकता होती है। |
IYY या IY या I | आईएसओ मानक वर्ष के अंतिम 3,2,1 अंक। केवल आउटपुट |
आर एम | महीने का रोमन अंक प्रतिनिधित्व (I .. XII) |
आरआर | वर्ष के अंतिम 2 अंक। |
RRRR | वर्ष के अंतिम 2 अंक जब आउटपुट के लिए उपयोग किए जाते हैं। इनपुट के लिए उपयोग किए जाने पर फाउट-डिजिट के वर्षों को स्वीकार करता है। |
सपा | प्रायोजित प्रारूप। एक संख्या तत्व के अंत में दिखाई दे सकता है। परिणाम हमेशा अंग्रेजी में होता है। उदाहरण के लिए महीने के 10 प्रारूप में MMSP रिटर्न "दस" |
SPTH | प्रायोजित और क्रमिक प्रारूप; 1 में पहला परिणाम। |
वें | इसे क्रमिक स्वरूप में एक संख्या में परिवर्तित करता है। उदाहरण के लिए 1 becoms 1st। |
टी | लघु समय प्रारूप। एनएलएस-सेटिंग्स पर निर्भर करता है। टाइमस्टैम्प के साथ ही उपयोग करें। |
TZD | संक्षिप्त समय क्षेत्र का नाम। यानी पी.एस.टी. |
TZH, TZM | समय क्षेत्र घंटे / मिनट विस्थापन। |
TZR | समय क्षेत्र क्षेत्र |
एक्स | स्थानीय मूलांक वर्ण। अमेरिका में यह एक अवधि (!) है। |
नीचे दिए गए चुनिंदा प्रश्नों को वर्ण इनपुट के रूप में स्वीकार करते हैं और प्रारूप निर्दिष्ट के बाद उन्हें प्रिंट करते हैं।
SELECT TO_NUMBER('121.23', '9G999D99')
FROM DUAL
TO_NUMBER('121.23','9G999D99')
------------------------------
121.23
SELECT TO_NUMBER('1210.73', '9999.99')
FROM DUAL;
TO_NUMBER('1210.73','9999.99')
------------------------------
1210.73
TO_DATE फ़ंक्शन
फ़ंक्शन इनपुट के रूप में वर्ण मान लेता है और उसी के बराबर स्वरूपित दिनांक लौटाता है। TO_DATE फ़ंक्शन उपयोगकर्ताओं को किसी भी प्रारूप में एक तारीख दर्ज करने की अनुमति देता है, और फिर यह Oracle 11g द्वारा उपयोग किए जाने वाले डिफ़ॉल्ट प्रारूप में प्रवेश को परिवर्तित करता है।
वाक्य - विन्यास:
TO_DATE( string1, [ format_mask ], [ nls_language ] )
एक format_mask तर्क में तत्वों की एक श्रृंखला होती है जो यह दर्शाती है कि डेटा कैसा दिखना चाहिए और एकल उद्धरण चिह्नों में दर्ज किया जाना चाहिए।
प्रारूप मॉडल | विवरण |
---|---|
साल | साल, बाहर वर्तनी |
YYYY | 4-अंक वर्ष |
YYY, YY, वाई | वर्ष का अंतिम 3, 2 या 1 अंक। |
IYY, आईवाई, मैं | आईएसओ वर्ष के अंतिम 3, 2 या 1 अंक। |
IYYY | आईएसओ मानक के आधार पर 4 अंकों का वर्ष |
RRRR | 2-अंकीय वर्ष स्वीकार करता है और 4-अंकीय वर्ष देता है। |
क्यू | वर्ष का क्वार्टर (1, 2, 3, 4; JAN-MAR = 1)। |
मिमी | महीना (01-12; JAN = 01)। |
सोमवार | महीने का संक्षिप्त नाम। |
महीना | महीने का नाम, 9 वर्णों की लंबाई के लिए खाली के साथ गद्देदार। |
आर एम | रोमन अंक महीना (I-XII; JAN = I)। |
WW | सप्ताह का सप्ताह (1-53) जहां सप्ताह 1 वर्ष के पहले दिन से शुरू होता है और वर्ष के सातवें दिन तक जारी रहता है। |
डब्ल्यू | सप्ताह का महीना (1-5) जहां सप्ताह 1 महीने के पहले दिन से शुरू होता है और सातवें पर समाप्त होता है। |
आईडब्ल्यू | आईएसओ मानक के आधार पर वर्ष का सप्ताह (1-52 या 1-53)। |
घ | सप्ताह का दिन (1-7)। |
दिन | दिन का नाम। |
डीडी | महीने का दिन (1-31)। |
DDD | वर्ष का दिन (1-366)। |
डीवाई | दिन का संक्षिप्त नाम। |
जे | जूलियन डे; 1 जनवरी, 4712 ईसा पूर्व से दिनों की संख्या। |
HH12 | दिन का घंटा (1-12)। |
HH24 | दिन का घंटा (0-23)। |
कुमारी | मिनट (0-59)। |
Sssss | आधी रात (0-86399) के बाद के सेकंड। |
सीमांत बल | आंशिक सेकंड। भिन्नात्मक सेकंड में अंकों की संख्या को इंगित करने के लिए एफएफ के बाद 1 से 9 तक के मूल्य का उपयोग करें। उदाहरण के लिए, 'एफएफ 4'। |
दोपहर से पूर्व दोपहर के बाद | मध्याह्न सूचक |
ई, ई.पू. | ई.पू., बीसी सूचक |
TZD | डेलाइट बचत की जानकारी। उदाहरण के लिए, 'PST' |
TZH, TZM, TZR | समय क्षेत्र घंटे / मिनट / क्षेत्र। |
निम्न उदाहरण एक चरित्र स्ट्रिंग को दिनांक में परिवर्तित करता है:
SELECT TO_DATE('January 15, 1989, 11:00 A.M.', 'Month dd, YYYY, HH:MI A.M.', 'NLS_DATE_LANGUAGE = American')
FROM DUAL;
TO_DATE('
---------
15-JAN-89
सामान्य कार्य
डेटाबेस में NULL मान को संभालने के लिए सामान्य कार्यों का उपयोग किया जाता है। सामान्य NULL हैंडलिंग फ़ंक्शन का उद्देश्य NULL मानों को वैकल्पिक मान से प्रतिस्थापित करना है। हम नीचे इन कार्यों के माध्यम से संक्षेप में देखेंगे।
NVL
एनवीएल फ़ंक्शन एक पूर्ण मान के लिए वैकल्पिक मूल्य का विकल्प देता है।
वाक्य - विन्यास:
NVL( Arg1, replace_with )
सिंटैक्स में, दोनों पैरामीटर अनिवार्य हैं। ध्यान दें कि NVL फ़ंक्शन सभी प्रकार के डेटा प्रकारों के साथ काम करता है। और यह भी कि मूल स्ट्रिंग और प्रतिस्थापन का डेटा प्रकार संगत स्थिति में होना चाहिए या तो या तो या समान रूप से Oracle द्वारा परिवर्तनीय होना चाहिए।
यदि arg1 एक वर्ण मान है, तो oracle प्रतिस्थापन स्ट्रिंग को डेटा प्रकार से संगत करता है arg1 के साथ उनकी तुलना करने से पहले और VARCHAR2 को expr1 के वर्ण सेट में लौटाता है। यदि arg1 संख्यात्मक है, तो Oracle उच्चतम संख्यात्मक पूर्वता के साथ तर्क को निर्धारित करता है, और अन्य तर्क को उस डेटा प्रकार में परिवर्तित करता है, और उस डेटा प्रकार को लौटाता है।
नीचे दिए गए सेलेक्ट स्टेटमेंट में 'n / a' दिखाई देगा, अगर किसी कर्मचारी को अभी तक कोई जॉब नहीं दी गई है, यानी JOB_ID NULL है। अन्यथा, यह वास्तविक JOB_ID मान प्रदर्शित करेगा।
SELECT first_name, NVL(JOB_ID, 'n/a')
FROM employees;
NVL2
एनवीएल से अधिक की वृद्धि के रूप में, ओरेकल ने न केवल कॉलम मानों के लिए बल्कि नॉट कॉलम के लिए भी मूल्य के विकल्प के लिए एक समारोह पेश किया। NVL2 फ़ंक्शन का उपयोग NULL के साथ-साथ गैर NULL मान के लिए एक वैकल्पिक मूल्य स्थानापन्न करने के लिए किया जा सकता है।
वाक्य - विन्यास:
NVL2( string1, value_if_NOT_null, value_if_null )
यदि किसी कर्मचारी के लिए JOB_CODE NULL है, तो नीचे का चयन विवरण 'बेंच' प्रदर्शित करेगा। JOB CODE के निश्चित नहीं शून्य मान के लिए, यह निरंतर मान 'नौकरी असाइन' दिखाएगा।
SQL> SELECT NVL2(JOB_CODE, 'Job Assigned', 'Bench')
FROM employees;
NULLIF
NULLIF फ़ंक्शन दो तर्कों expr1 और expr2 की तुलना करता है। यदि expr1 और expr2 बराबर हैं, तो यह NULL देता है; और, यह expr1 देता है। अन्य अशक्त हैंडलिंग फ़ंक्शन के विपरीत, पहला तर्क NULL नहीं हो सकता है।
वाक्य - विन्यास:
NULLIF (expr1, expr2)
ध्यान दें कि पहला तर्क एक अभिव्यक्ति हो सकता है जो NULL का मूल्यांकन करता है, लेकिन यह शाब्दिक NULL नहीं हो सकता है। फ़ंक्शन को निष्पादित करने के लिए दोनों पैरामीटर अनिवार्य हैं।
नीचे दिया गया क्वेरी दोनों इनपुट मानों से NULL लौटाता है, 12 समान हैं।
SELECT NULLIF (12, 12)
FROM DUAL;
इसी तरह, नीचे दिए गए क्वेरी 'SUN' के बाद से दोनों स्ट्रिंग्स समान नहीं हैं।
SELECT NULLIF ('SUN', 'MOON')
FROM DUAL;
सम्मिलित
COALESCE फ़ंक्शन, NVL का एक अधिक सामान्य रूप है, तर्क सूची में पहला गैर-अशक्त अभिव्यक्ति देता है। इसमें न्यूनतम दो अनिवार्य पैरामीटर हैं लेकिन अधिकतम तर्कों की कोई सीमा नहीं है।
वाक्य - विन्यास:
COALESCE (expr1, expr2, ... expr_n )
नीचे चयनित क्वेरी पर विचार करें। यह एक कर्मचारी के लिए पता फ़ील्ड में खिलाया गया पहला नहीं शून्य मान का चयन करता है।
SELECT COALESCE (address1, address2, address3) Address
FROM employees;
दिलचस्प बात यह है कि COALESCE फ़ंक्शन का कार्य IF..elsIF..ENDIF निर्माण के समान है। उपरोक्त क्वेरी को फिर से लिखा जा सकता है -
IF address1 is not null THEN
result := address1;
ELSIF address2 is not null THEN
result := address2;
ELSIF address3 is not null THEN
result := address3;
ELSE
result := null;
END IF;
सशर्त कार्य
Oracle SQL स्टेटिक में भी शर्तें लगाने के लिए DECODE और CASE को सशर्त फ़ंक्शन प्रदान करता है।
DECODE फ़ंक्शन
फ़ंक्शन IF..THEN..ELSE सशर्त प्रक्रियात्मक कथन का SQL तुल्यता है। DECODE सभी डेटा प्रकारों के मान / स्तंभ / भाव के साथ काम करता है।
वाक्य - विन्यास:
DECODE (expression, search, result [, search, result]... [, default])
DECODE फ़ंक्शन क्रम में प्रत्येक खोज मान के विरुद्ध अभिव्यक्ति की तुलना करता है। यदि अभिव्यक्ति और खोज तर्क के बीच समानता मौजूद है, तो यह संबंधित परिणाम देता है। बिना मिलान के मामले में, डिफ़ॉल्ट मान लौटाया जाता है, यदि परिभाषित किया गया है, तो NULL किसी भी प्रकार की अनुकूलता के बेमेल होने पर, परिणाम को वापस करने के लिए oracle आंतरिक रूप से संभव रूपांतरण करता है।
तथ्य के रूप में, Oracle DECODE फ़ंक्शन के साथ काम करते समय दो नल को बराबर मानता है।
SELECT DECODE(NULL,NULL,'EQUAL','NOT EQUAL')
FROM DUAL;
DECOD
-----
EQUAL
यदि अभिव्यक्ति अशक्त है, तो ओरेकल पहली खोज का परिणाम देता है जो शून्य भी है। DECODE फ़ंक्शन में अधिकतम घटकों की संख्या 255 है।
SELECT first_name, salary, DECODE (hire_date, sysdate,'NEW JOINEE','EMPLOYEE')
FROM employees;
मामला अभिव्यक्ति
मामले अभिव्यक्तियाँ DECODE के समान अवधारणा पर काम करती हैं, लेकिन वाक्य रचना और उपयोग में भिन्न होती हैं।
वाक्य - विन्यास:
CASE [ expression ]
WHEN condition_1 THEN result_1
WHEN condition_2 THEN result_2
...
WHEN condition_n THEN result_n
ELSE result
END
ओरेकल खोज बाएं से शुरू होती है और दाएं तरफ चलती है जब तक कि यह एक वास्तविक स्थिति नहीं पाती है, और फिर इसके साथ जुड़े परिणाम अभिव्यक्ति देता है। यदि कोई स्थिति सत्य नहीं पाई जाती है, और एक ईएलएसई खंड मौजूद है, तो ओरेकल रिटर्न परिणाम अन्य के साथ परिभाषित होता है। अन्यथा, ओरेकल शून्य देता है।
एक CASE अभिव्यक्ति में अधिकतम तर्क 255 हैं। सभी अभिव्यक्तियाँ इस सीमा की ओर गिनती करती हैं, जिसमें एक साधारण CASE अभिव्यक्ति की प्रारंभिक अभिव्यक्ति और वैकल्पिक ELSE अभिव्यक्ति शामिल है। प्रत्येक जब ... दो जोड़ी के रूप में गिना जाता है। इस सीमा को पार करने से बचने के लिए, आप CASE के भावों को मिटा सकते हैं, ताकि return_expr स्वयं एक CASE अभिव्यक्ति हो।
SELECT first_name, CASE WHEN salary < 200 THEN 'GRADE 1'
WHEN salary > 200 AND salary < 5000 THEN 'GRADE 2'
ELSE 'GRADE 3'
END CASE
FROM employees;
ENAM CASE
---- -------
JOHN GRADE 2
EDWIN GRADE 3
KING GRADE 1