जैसा कि पीएल/एसक्यूएल अपवाद हैंडलिंग के परिचय में चर्चा की गई है, ओरेकल पीएल/एसक्यूएल में उपयोगकर्ता-परिभाषित अपवाद घोषित करने के तीन तरीके हैं। उन तीनों में से हम पहले ही पिछले ट्यूटोरियल में चर्चा कर चुके हैं और पहला तरीका सीख चुके हैं। आज इस ब्लॉग में हम एक कदम आगे बढ़ेंगे और उपयोगकर्ता परिभाषित अपवाद घोषित करने का दूसरा तरीका देखेंगे और सीखेंगे कि RAISE_APPLICATION_ERROR पद्धति का उपयोग करके उपयोगकर्ता-परिभाषित अपवाद कैसे घोषित किया जाए।
RAISE_APPLICATION_ERROR विधि क्या है?
RAISE APPLICATION ERROR एक संग्रहीत कार्यविधि है जो Oracle सॉफ़्टवेयर के साथ अंतर्निहित है। इस प्रक्रिया का उपयोग करके आप एक त्रुटि संख्या को कस्टम त्रुटि संदेश के साथ जोड़ सकते हैं। त्रुटि संख्या के साथ-साथ कस्टम त्रुटि संदेश दोनों को मिलाकर आप एक त्रुटि स्ट्रिंग बना सकते हैं जो उन डिफ़ॉल्ट त्रुटि स्ट्रिंग्स के समान दिखती है जो त्रुटि होने पर Oracle इंजन द्वारा प्रदर्शित होती हैं।
RAISE_APPLICATION_ERROR प्रक्रिया का उपयोग करके हम कितनी त्रुटियां उत्पन्न कर सकते हैं?
RAISE_APPLICATION_ERROR प्रक्रिया हमें अपनी त्रुटियों को -20,000 से -20,999 तक संख्याबद्ध करने की अनुमति देती है, इस प्रकार हम कह सकते हैं कि RAISE_APPLICATION_ERROR प्रक्रिया का उपयोग करके हम 1000 त्रुटियां उत्पन्न कर सकते हैं।
Raise_application_error किस पैकेज का हिस्सा है?
आप DBMS_STANDARD पैकेज के अंदर RAISE_APPLICATION_ERROR प्रक्रिया पा सकते हैं।
राइज_एप्लिकेशन_एरर का सिंटैक्स
raise_application_error (error_number, message [, {TRUE | FALSE}]);
यहां error_number -20000.. -20999 की सीमा में एक ऋणात्मक पूर्णांक है और संदेश 2048 बाइट तक की वर्ण स्ट्रिंग है। वैकल्पिक तीसरे पैरामीटर के TRUE होने की स्थिति में, त्रुटि को पिछली सभी त्रुटियों के ढेर पर रखा जाता है। हालांकि FALSE (डिफ़ॉल्ट) पैरामीटर के मामले में, त्रुटि सभी पिछली त्रुटियों को बदल देती है। RAISE_APPLICATION_ERROR पैकेज DBMS_STANDARD का हिस्सा है, और आपको पैकेज STANDARD के संदर्भ में योग्यता प्राप्त करने की आवश्यकता नहीं है।
RAISE_APPLICATION_ERROR प्रक्रिया का उदाहरण
निम्नलिखित उदाहरण में हम उपयोगकर्ता से संख्यात्मक डेटाटाइप का इनपुट लेंगे और जांचेंगे कि यह 18 या उससे अधिक है या नहीं। यदि ऐसा नहीं है तो उपयोगकर्ता-परिभाषित त्रुटि, जिसे हम घोषित करेंगे, को उठाया जाएगा अन्यथा कार्यक्रम के निष्पादन का सामान्य प्रवाह होगा।
चरण1:सर्वर आउटपुट को चालू करें
यदि हम डिफ़ॉल्ट आउटपुट स्क्रीन पर पीएल/एसक्यूएल प्रोग्राम द्वारा लौटाए गए परिणाम को देखना चाहते हैं तो हमें सर्वर आउटपुट को 'ऑन' सेट करना होगा जो डिफ़ॉल्ट रूप से सत्र के लिए 'ऑफ' पर सेट होता है।
SET SERVEROUTPUT ON;
चरण 2:उपयोगकर्ता इनपुट लें
हालाँकि हम अपने कोड में मानों को हार्डवायर कर सकते हैं जैसा कि हमने पिछले ट्यूटोरियल में किया था लेकिन यह उतना मज़ेदार नहीं है। कोड को और अधिक गतिशील बनाने के लिए मैंने इस बार उपयोगकर्ता द्वारा इनपुट को स्वीकार करने का निर्णय लिया और उन्हें पॉप-अप बॉक्स में मूल्य दर्ज करने की अनुमति दी, जिस पर एक अनुकूलित संदेश छपा हुआ था।
हम Oracle PL/SQL में ACCEPT कमांड का उपयोग करके उस पर मुद्रित एक अनुकूलित संदेश के साथ पॉप-अप बॉक्स का उपयोग करके इनपुट ले सकते हैं।
ACCEPT var_age NUMBER PROMPT 'What is your age?';
कमांड की शुरुआत कीवर्ड एक्सेप्ट से होती है जिसके बाद वेरिएबल का नाम और उसका डेटाटाइप होता है। हमारे मामले में नाम var_age है और डेटाटाइप NUMBER है। यह कथन का पहला भाग है। यह हिस्सा इनपुट वैल्यू को स्टोर करने में हमारी मदद करेगा। स्टेटमेंट का दूसरा आधा हिस्सा पॉप-अप बॉक्स पर कस्टमाइज्ड मैसेज को प्रिंट करने के लिए जिम्मेदार होगा। कीवर्ड PROMPT का उपयोग करना, जो कि वेरिएबल के डेटाटाइप के ठीक बाद में है, आप किसी भी वांछित स्ट्रिंग को निर्दिष्ट कर सकते हैं जिसे आप अपने पॉप-अप बॉक्स पर प्रिंट करना चाहते हैं। हमारे मामले में यह अनुकूलित संदेश होगा 'आपकी उम्र क्या है?'
यदि आप चाहते हैं कि मैं ACCEPT कमांड को विस्तार से समझाते हुए एक विस्तृत ट्यूटोरियल करूं तो हैशटैग #RebellionRider का उपयोग करके इस ब्लॉग को साझा करें। आप मुझे मेरे ट्विटर @RebellionRider पर भी लिख सकते हैं।
चरण 3:चर घोषित करें
DECLARE age NUMBER := &var_age;
स्कोप प्रतिबंध के कारण हम वेरिएबल में संग्रहीत मान का उपयोग नहीं कर सकते हैं जिसका उपयोग हमने स्वीकार कमांड में किया था। इसका मतलब है कि हम उस मान का सीधे हमारे पीएल/एसक्यूएल प्रोग्राम में उपयोग नहीं कर सकते हैं। हम इस समस्या को एक वैरिएबल var_age में संग्रहीत मान निर्दिष्ट करके हल कर सकते हैं जो पीएल/एसक्यूएल ब्लॉक के लिए स्थानीय है। ठीक यही हमने कोड के उपरोक्त खंड में किया था।
उपरोक्त कोड खंड में हमने 'आयु' नाम के साथ एक स्थानीय चर घोषित किया और असाइनमेंट ऑपरेटर का उपयोग करके वेरिएबल var_age में संग्रहीत मान असाइन किया।
चरण 4:RAISE_APPLICATION_ERROR प्रक्रिया का उपयोग करके उपयोगकर्ता-परिभाषित अपवाद घोषित करें
BEGIN IF age < 18 THEN RAISE_APPLICATION_ERROR (-20008, 'you should be 18 or above for the DRINK!'); END IF;
यहां इस कोड खंड में हमने RAISE_APPLICATION_ERROR प्रक्रिया का उपयोग करके उपयोगकर्ता-परिभाषित अपवाद घोषित किया है। इस प्रक्रिया को दो मापदंडों का उपयोग करके कहा जाता है। जिसमें पहला पैरामीटर ऋणात्मक संख्या है, जो मेरे मामले में -20008 है और दूसरी संख्या एक स्ट्रिंग है जो समान त्रुटि होने पर प्रदर्शित होती है।
अब प्रश्न यह है कि यह त्रुटि कब होगी?
जैसा कि आप देख सकते हैं कि कोड एक IF-THEN सशर्त नियंत्रण ब्लॉक के अंदर संलग्न है जो यह सुनिश्चित कर रहा है कि त्रुटि तभी उठाई जाएगी जब उपयोगकर्ता की आयु 18 वर्ष से कम हो।
चरण 5:निष्पादन योग्य कथन
DBMS_OUTPUT.PUT_LINE('Sure, What would you like to have?');
निष्पादन योग्य कथन वे हैं जो संकलित हो जाते हैं और जब कोई त्रुटि नहीं होती है और प्रोग्राम में निष्पादन का सामान्य प्रवाह होता है। कोड को सरल और समझने में आसान बनाने के लिए मैंने सिर्फ एक स्टेटमेंट लिखा है जो DBMS OUTPUT स्टेटमेंट है।
चरण 6:अपवाद हैंडलर लिखें
अब जब हमने उपयोगकर्ता-परिभाषित अपवाद घोषित कर दिया है और साथ ही उठाया है तो हमें इसके लिए अपवाद हैंडलर लिखने की आवश्यकता है। जैसा कि पिछले पीएल/एसक्यूएल ट्यूटोरियल में कहा गया था कि अपवाद हैंडलर अनुभाग में हम निर्दिष्ट करते हैं कि क्या होगा जब आपके द्वारा उठाई गई त्रुटि ट्रिगर होगी।
EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM); END; /
इस अपवाद प्रबंधन अनुभाग में मैंने DBMS OUTPUT स्टेटमेंट का उपयोग करके SQLERRM फ़ंक्शन को कॉल किया है। यह Oracle द्वारा प्रदान किया गया एक उपयोगिता फ़ंक्शन है जो पिछले अपवाद के लिए त्रुटि संदेश प्राप्त करता है।
आइए कोड के इन सभी छोटे टुकड़ों को एक बड़े प्रोग्राम में संकलित करें।
राइज_एप्लिकेशन_त्रुटि प्रक्रिया का उपयोग कर उपयोगकर्ता-परिभाषित अपवाद
SET SERVEROUTPUT ON; ACCEPT var_age NUMBER PROMPT 'What is yor age'; DECLARE age NUMBER := &var_age; BEGIN IF age < 18 THEN RAISE_APPLICATION_ERROR (-20008, 'you should be 18 or above for the DRINK!'); END IF; DBMS_OUTPUT.PUT_LINE ('Sure, What would you like to have?'); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE (SQLERRM); END; /
यह Oracle डेटाबेस में Raise_Application_Error प्रक्रिया का उपयोग करके उपयोगकर्ता-परिभाषित अपवाद घोषित करने का एक संक्षिप्त लेकिन वर्णनात्मक ट्यूटोरियल है। आशा है कि आपने कुछ नया सीखा और पढ़ने में आनंद आया। आप इस ब्लॉग को अपने सोशल मीडिया पर साझा करके सीखने में दूसरों की मदद कर सकते हैं और साथ ही मुझे और मेरे चैनल को आगे बढ़ने में मदद कर सकते हैं। धन्यवाद और आपका दिन शुभ हो!