सशर्त अभिव्यक्तियों का उपयोग करना

सामान्य कार्य

डेटाबेस में 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