पीएल / एसक्यूएल में अपवादों को संभालना सीखें

यह आलेख पीएल / एसक्यूएल में दिए गए विभिन्न प्रकार के अपवादों पर चर्चा करके पीएल / एसक्यूएल में अपवाद से निपटने के लिए एक व्यापक मार्गदर्शिका है।

यदि आप एक प्रोग्रामर हैं, तो आप अपवाद की अवधारणा से परिचित हो सकते हैं । चूंकि त्रुटियां अपरिहार्य हैं और यहां तक ​​कि सबसे चतुर भी कोड लिखते समय गलतियां कर सकते हैं, हमें उनसे परिचित होना चाहिए कि उन्हें कैसे संभालना है। इस लेख में, हम विशेष रूप से PL / SQL में अपवाद हैंडलिंग के बारे में सीखेंगे।

पीएल / SQL-Edureka में SQL- एक्सेप्शन हैंडलिंगनीचे इस लेख में शामिल विषय दिए गए हैं:



एक अपवाद क्या है?

कोई भी असामान्य स्थिति या घटना जो हमारे कार्यक्रम निर्देशों के सामान्य प्रवाह को समय पर या सरल शब्दों में बाधित करती है एक अपवाद एक त्रुटि है।

PL / SQL में अपवाद हैंडलिंग का सिंटैक्स

DECLARE BEGIN EXCEPTION जब अपवाद १ से था तो १ अपवाद-हैंडलिंग-स्टेटमेंट जब भी अपवाद २ से जुड़ा हुआ था २-हैंडलिंग-स्टेटमेंट जब अपवाद ३-हैंडलिंग-स्टेटमेंट्स ........ तो दूसरों के अपवाद ३-हैंडलिंग-स्टेटमेंट END

यहां, हम कई अपवादों को सूचीबद्ध कर सकते हैं, जिन्हें हम संभालना चाहते हैं। डिफ़ॉल्ट अपवाद को exception जब अन्य लोगों ’का उपयोग करके नियंत्रित किया जाएगा

पीएल / एसक्यूएल में अपवाद हैंडलिंग का उदाहरण

नीचे दिया गया कार्यक्रम उस छात्र का नाम और पता प्रदर्शित करता है, जिसकी आईडी दी गई है। चूंकि हमारे डेटाबेस में आईडी मान 8 के साथ कोई छात्र नहीं है, इसलिए प्रोग्राम रन-टाइम अपवाद NO_DATA_FOUND उठाता है, जो EXCEPTION ब्लॉक में कैप्चर किया गया है।

DECLARE s_id studentS.id% type: = 8 s_name studentS.Name% type s_loc studentS.loc% type BEGIN SELECT नाम, loation INTO s_name, s_loc छात्रों के लिए WHERE आईडी = s_id DBMS_OUTPUT.PUT_LINE ('नाम:' s_name) .PUT_LINE ('स्थान:' || s_loc) EXCEPTION WHEN no_data_found THEN dbms_output.put_line ('ऐसा कोई छात्र नहीं!') जब दूसरों ने dbb_output.put_line ('उफ़, त्रुटि!') END।

आउटपुट

ऐसा कोई छात्र नहीं! PL / SQL प्रक्रिया सफलतापूर्वक पूर्ण हुई।

यहां, हम कई अपवादों को सूचीबद्ध कर सकते हैं, जिन्हें हम संभालना चाहते हैं। डिफ़ॉल्ट अपवाद ‘का उपयोग करके नियंत्रित किया जाएगा जब दूसरों को '

PL / SQL में अपवाद के प्रकार

  • सिस्टम परिभाषित किया गया
  • उपयोगकर्ता ने टाल दिया

इस लेख में अगला अपवाद हैंडलिंग पर है पीएल / एसक्यूएल आइए इन दोनों प्रकारों के बारे में विस्तार से चर्चा करें।

सिस्टम परिभाषित किया गया

Oracle सर्वर द्वारा परिभाषित और अनुरक्षित बनाए गए, ये अपवाद मुख्य रूप से Oracle मानक पैकेज में परिभाषित किए गए हैं। जब भी प्रोग्राम के अंदर कोई अपवाद होता है, ओरेकल सर्वर मेल खाता है और ओरेकल मानक पैकेज में उपलब्ध अपवादों के उपलब्ध सेट से उपयुक्त अपवाद की पहचान करता है। असल में, इन अपवादों को पूर्वनिर्धारित किया जाता है पीएल / एसक्यूएल जो उठ जाता है जब विशेष डेटाबेस नियम का उल्लंघन किया जाता है

सिस्टम-परिभाषित अपवाद आगे दो श्रेणियों में विभाजित किया गया है:

  • नामित प्रणाली अपवाद
  • सिस्टम अपवाद

नामित प्रणाली अपवाद

नामित PL / SQL अपवाद हैं पीएल / एसक्यूएल के मानक पैकेज में नामित , इसलिए डेवलपर को अपने कोड में PL / SQL अपवाद को परिभाषित करने की आवश्यकता नहीं है। पीएल / एसक्यूएल कई पूर्व-निर्धारित नामित अपवाद प्रदान करता है, जिन्हें किसी भी डेटाबेस नियम का उल्लंघन करने पर निष्पादित किया जाता है। निम्न तालिका कुछ महत्वपूर्ण पूर्व-परिभाषित अपवादों और ऋणों को सूचीबद्ध करती है

अपवाद Oracle त्रुटि SQLCODE विवरण
ACCESS_INTO_NULL06530 है-6530यह तब उठाया जाता है जब एक अशक्त वस्तु को स्वचालित रूप से एक मान दिया जाता है।
CASE_NOT_FOUND06592 है-6592यह तब उठाया जाता है जब विकल्पों में से कोई भी WHEN के खंड में नहीं होता है मामला बयान चयनित है, और कोई ईएलएसई खंड नहीं है।
COLLECTION_IS_NULL06531 है-6531यह तब उठाया जाता है जब कोई प्रोग्राम किसी अनइंस्टॉलिज्ड नेस्टेड टेबल या वेरिएंट के अलावा EXISTS के अलावा अन्य कलेक्शन के तरीकों को लागू करने का प्रयास करता है, या प्रोग्राम एक अनइंस्टाल्यूटेड नेस्टेड टेबल या वेरिए के तत्वों को मान असाइन करने का प्रयास करता है।
DUP_VAL_ON_INDEX00001-एकयह तब उठाया जाता है जब डुप्लिकेट मानों को एक अद्वितीय सूचकांक वाले कॉलम में संग्रहीत करने का प्रयास किया जाता है।
INVALID_CURSOR01001 है-1001यह तब उठाया जाता है जब एक कर्सर ऑपरेशन बनाने की कोशिश की जाती है जिसे अनुमति नहीं दी जाती है, जैसे कि बिना बंद किए गए कर्सर को बंद करना।
अमान्य संख्या01722 है-1722यह तब उठाया जाता है जब वर्ण स्ट्रिंग का संख्या में रूपांतरण विफल हो जाता है क्योंकि स्ट्रिंग एक मान्य संख्या का प्रतिनिधित्व नहीं करती है।
LOGIN_DENIED01017-1017यह तब उठाया जाता है जब कोई प्रोग्राम किसी अमान्य उपयोगकर्ता नाम या पासवर्ड के साथ डेटाबेस पर लॉग ऑन करने का प्रयास करता है।
कोई डेटा नहीं मिला01403 है+100इसे तब चुना जाता है जब कोई SELECT INTO स्टेटमेंट कोई पंक्तियाँ नहीं लौटाता है।
NOT_LOGGED_ON01012-1012डेटाबेस से कनेक्ट किए बिना डेटाबेस कॉल जारी किए जाने पर इसे उठाया जाता है।
PROGRAM_ERROR06501 है-6501यह तब उठाया जाता है जब PL / SQL में आंतरिक समस्या होती है।
ROWTYPE_MISMATCH06504 है-6504 हैयह तब उठाया जाता है जब एक कर्सर असंगत डेटा प्रकार वाले चर में मूल्य प्राप्त करता है।
SELF_IS_NULL30625 है-30625यह तब उठाया जाता है जब एक सदस्य विधि लागू की जाती है, लेकिन ऑब्जेक्ट प्रकार का उदाहरण प्रारंभिक नहीं था।
STORAGE_ERROR06500 रु-6500 रुयह तब उठाया जाता है जब पीएल / एसक्यूएल मेमोरी से बाहर हो गया या मेमोरी दूषित हो गई थी।
TOO_MANY_ROWS01422 है-1422यह तब उठाया जाता है जब एक SELECT INTO स्टेटमेंट एक से अधिक पंक्ति में लौटता है।
VALUE_ERROR06502-6502 हैयह तब उठाया जाता है जब एक अंकगणित, रूपांतरण, छंटनी या आकार की बाधा उत्पन्न होती है।
ZERO_DIVIDE01476 है1476यह तब उठाया जाता है जब किसी संख्या को शून्य से विभाजित करने का प्रयास किया जाता है।

उदाहरण

सृजन या समीक्षा प्रक्रिया add_new_student (छात्र _id_in इन NUMBER, छात्र _name_IN IN VARCHAR2) IS BEGIN INSERT INTO छात्र (छात्र _id, छात्र _name): विद्यार्थी (_id_in, छात्र _name_in) छात्र DUP_V_V_AL_IN_Suddy ) जब दूसरों को उठाएं______प्रतिबंध__रचना (-20002, 'एक त्रुटि हुई।') END

पीएल / एसक्यूएल में अपवाद हैंडलिंग पर इस लेख में आगे बढ़ते हुए, आइए समझते हैं कि अनाम सिस्टम अपवाद क्या हैं।

सिस्टम अपवाद

सिस्टम अपवाद जिसके लिए ओरेकल का नाम नहीं है, को अनाम सिस्टम अपवाद के रूप में जाना जाता है। ये अपवाद अक्सर नहीं होते हैं और एक कोड और एक संबद्ध संदेश के साथ लिखे जाते हैं।

अनाम सिस्टम अपवादों को संभालने के लिए मूल रूप से दो तरीके हैं:

1. जब दूसरों के अपवाद हैंडलर का उपयोग करना

2. अपवाद कोड को एक नाम से जोड़ना और इसे नामित अपवाद के रूप में उपयोग करना।

अनाम सिस्टम अपवादों के लिए कुछ कदम निम्नलिखित हैं:

  • उन्हें स्पष्ट रूप से उठाएं।
  • यदि उन्हें then जब अन्य ’में संभाला नहीं जाता है, तो उन्हें स्पष्ट रूप से संभाला जाना चाहिए।
  • स्पष्ट रूप से अपवाद को संभालने के लिए, उन्हें प्रैग एक्सेप्टन_INIT का उपयोग करके घोषित किया जा सकता है और अपवाद खंड में उपयोगकर्ता-परिभाषित अपवाद नाम को संदर्भित करके नियंत्रित किया जा सकता है।

प्रागमा EXCEPTION_INIT का उपयोग करते हुए अनाम अपवादों से निपटने का एक उदाहरण लेख में बाद में प्रदान किया गया है। पीएल / एसक्यूएल में अपवाद हैंडलिंग पर इस लेख में आगे बढ़ते हुए, आइए हम उपयोगकर्ता द्वारा परिभाषित एक्सपट्र्स को समझें।

उपयोगकर्ता परिभाषित

अन्य सभी प्रोग्रामिंग भाषाओं की तरह, ओरेकल भी आपको अपने स्वयं के अपवादों को लागू करने की घोषणा करने की अनुमति देता है। सिस्टम परिभाषित अपवादों के विपरीत, ये अपवाद PL / SQL ब्लॉक में स्पष्ट रूप से उठाए गए हैं।

Oracle डेटाबेस में उपयोगकर्ता-परिभाषित अपवाद घोषित करने के लिए कदम

हम निम्नलिखित 3 तरीकों से Oracle डेटाबेस में उपयोगकर्ता-परिभाषित अपवादों को परिभाषित कर सकते हैं:

  • अपवाद प्रकार के चर का उपयोग करना

यहां, हम EXCEPTION के एक चर को घोषित करके उपयोगकर्ता-परिभाषित अपवाद की घोषणा कर सकते हैं डाटा प्रकार हमारे कोड में और RAISE स्टेटमेंट का उपयोग करके हमारे कार्यक्रम में इसे स्पष्ट रूप से बढ़ाएं।

  • PRAGMA EXCEPTION_INIT फ़ंक्शन का उपयोग करना

हम एक पूर्वनिर्धारित त्रुटि संख्या को EXCEPTION डेटाटाइप के चर के साथ परिभाषित कर सकते हैं

  • RAISE_APPLICATION_ERROR विधि का उपयोग करना

इस पद्धति का उपयोग करके, हम अपने स्वयं के अनुकूलित त्रुटि संख्या और संदेश के साथ एक उपयोगकर्ता-परिभाषित अपवाद घोषित कर सकते हैं।

अब तक आपको पीएल / एसक्यूएल में उपयोगकर्ता-परिभाषित अपवादों को बढ़ाने के तरीकों पर एक मोटा विचार मिल गया होगा। हम पीएल / एसक्यूएल में अपवाद हैंडलिंग पर इस लेख में आगे दिए गए उदाहरणों में से प्रत्येक के बारे में सीखेंगे।

इस लेख में आगे, आइए हम उपयोगकर्ता द्वारा परिभाषित अपवाद हैंडलिंग के प्रदर्शनों के साथ आगे बढ़ें।

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

पीएल / एसक्यूएल में एक्सेप्शन हैंडलिंग पर इस लेख में आगे बढ़ते हुए, आइए हम समझते हैं कि एक्सेप्‍टिशन प्रकार के चर का उपयोग कैसे करें।

अपवाद प्रकार के चर का उपयोग करना

उपयोगकर्ता-परिभाषित अपवाद घोषित करने की प्रक्रिया को तीन भागों में विभाजित किया गया है और ये 3 भाग हैं:

  • एक चर अपवाद डेटाटाइप की घोषणा करें
  • अपवाद उठाएं
  • अपवाद को संभालें

उपरोक्त चरणों को प्रदर्शित करने के लिए एक कोड लिखें।

DECLARE var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER पूर्व-डिवजेरो EXCEPTION

उपरोक्त घोषणा ब्लॉक में, हमारे पास चार चर हैं, जिनमें से पहले तीन सामान्य संख्या डेटाटाइप चर हैं और चौथा जो ex_DivZero है वह विशेष अपवाद डेटाटाइप चर है। चौथा हमारे उपयोगकर्ता द्वारा परिभाषित अपवाद है।

DECLARE var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER पूर्व-डिवजेरो EXCEPTION

इस अनाम ब्लॉक का उपरोक्त निष्पादन भाग, तब ही क्रिया में आएगा जब भाजक 0. है। यदि विभाजक शून्य है जैसा कि हमारे मामले में है, तो त्रुटि उठाई जाएगी और कार्यक्रम का नियंत्रण अगले सभी चरणों को छोड़ देगा। अपवाद हैंडलर मिलान के लिए दिखेगा। इस मामले में जहां यह किसी अन्य को पाता है, यह तदनुसार कार्रवाई करेगा, अन्यथा यह या तो कार्यक्रम को समाप्त कर देगा या हमें एक अनहेल्दी सिस्टम परिभाषित त्रुटि के साथ संकेत देगा।

जब EX_DivZero से DBMS_OUTPUT.PUT_LINE (The त्रुटि, विभाजक शून्य नहीं हो सकता)

यह अपवाद हैंडलर है। जैसे ही उपयोगकर्ता 0 के रूप में विभाजक दर्ज करता है, उपरोक्त संदेश स्ट्रिंग को संकेत दिया जाएगा।

अंतिम कोड:

DECLARE var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPTION BEGIN अगर var_divisor = 0 THEN RAISE ex-DivZero NUMBER वरुण_result: = var_dividend / var_divisor DBMS_OUTPUT_LINE_IN_INVITEN_IN से अलग है। = 0 फिर से एक्स-डिवेज़रो END करें यदि Var_result: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE ('परिणाम =' || var_result) END

पीएल / एसक्यूएल में अपवाद हैंडलिंग पर इस लेख में आगे बढ़ते हुए, हमें समझते हैं कि कैसे PRAGMA_EXCEPTION_INIT विधि का उपयोग करें।

PRAGMA EXCEPTION_INIT फ़ंक्शन का उपयोग करना

में PRAGMA EXCEPTION_INIT फ़ंक्शन, एक अपवाद नाम Oracle त्रुटि संख्या के साथ जुड़ा हुआ है। इस नाम का उपयोग त्रुटि के लिए अपवाद हैंडलर को डिजाइन करने में किया जा सकता है।कई उपयोगकर्ता परिभाषित त्रुटियों वाली विशाल परियोजनाओं के लिए, PRAGMA EXCEPTION_INIT सबसे उपयोगी और उपयुक्त विधि है।

वाक्य - विन्यास:

PRAGMA EXCEPTION_INIT (अपवाद_name; -Oracle_error_number)

उदाहरण

DECLARE deadlock_detected EXCEPTION PRAGMA EXCEPTION_INIT (deadlock_detected, -60) BEGIN NULL - कुछ ऑपरेशन जो ORA-00060 त्रुटि का कारण बनता है EXCEPTION WHAT deadlock_detected THEN NULL - त्रुटि END को हैंडल करें

PRAGMA EXCEPTION_INIT कंपाइलर को अपवाद नाम को Oracle त्रुटि संख्या के साथ संबद्ध करने के लिए कहता है जैसा कि पहले बताया गया है। यह आपको नाम से किसी भी आंतरिक अपवाद को संदर्भित करता है और इसके लिए एक विशिष्ट हैंडलर लिखता है। जब आप एक त्रुटि स्टैक, या त्रुटि संदेशों का क्रम देखते हैं, तो शीर्ष पर एक वह है जिसे फँसाया और संभाला जा सकता है।

जावा घोषित वस्तुओं की सरणी

पीएल / एसक्यूएल में अपवाद हैंडलिंग पर इस लेख में आगे बढ़ते हुए, आइए समझते हैं कि RAISE_APPLICATION_ERPLOR विधि का उपयोग कैसे करें।

RAISE_APPLICATION_ERROR विधि का उपयोग करना

यह एक प्रक्रिया है जो ओरेकल सॉफ्टवेयर के साथ इनबिल्ट होती है। इस प्रक्रिया का उपयोग करके हम एक त्रुटि संख्या को एक कस्टम त्रुटि संदेश के साथ जोड़ सकते हैं। त्रुटि संख्या और कस्टम त्रुटि संदेश दोनों को मिलाते हुए, एक त्रुटि स्ट्रिंग बनाई जा सकती है जो उन डिफ़ॉल्ट त्रुटि स्ट्रिंग के समान दिखती है जो त्रुटि सामने आने पर oracle द्वारा प्रदर्शित की जाती हैं। RAISE_APPLICATION_ERROR प्रक्रिया DBMS_STANDARD पैकेज के अंदर पाई जाती है

वाक्य - विन्यास

up_application_error (error_number, संदेश [, TRUE])

उदाहरण

/ * एक ट्रिगर trg_emp_detail_chk बनाया गया है। * / बनाएँ या ट्रैक TRIGGER trg_emp_detail_chk / * ट्रिगर समय को EMPLOYEES टेबल पर BEDORE UPDATE के रूप में घोषित किया गया है। * / कर्मचारियों के सामने आने से पहले अनुमति के लिए अनुमति न दें। सिस्टम समय का दिन शनिवार या रविवार है या नहीं। * / IF ट्रिम (TO_CHAR (sysdate, 'दिन')) IN ('शनिवार', 'रविवार') THEN raise_application_error (-20000, 'आप करने के लिए अधिकृत नहीं हैं सप्ताहांत में कोई भी संशोधन !! ') / * प्रक्रिया को बढ़ाने के लिए-पैरामीटर को -20000 के रूप में कहा जाता है और दूसरा पैरामीटर डिफ़ॉल्ट पाठ के साथ दूसरा पैरामीटर यह कहते हुए कि उपयोगकर्ता सप्ताहांत में किसी भी संशोधन को करने के लिए अधिकृत नहीं है। * / END IF END

इसके साथ हम 'पीएल / एसक्यूएल में अपवाद हैंडलिंग' पर इस लेख के अंत में आते हैं। मुझे उम्मीद है कि इस विषय को अच्छी तरह से समझा गया है और आपने मदद की है। अपने स्वयं के कोड लिखने की कोशिश करें और इस लेख में बताए गए तरीकों को शामिल करें।

यदि आप इस तकनीक पर पेशेवरों से प्रशिक्षित होना चाहते हैं, तो आप edureka से संरचित प्रशिक्षण का विकल्प चुन सकते हैं! इसकी जांच करो 250,000 से अधिक संतुष्ट शिक्षार्थियों के एक नेटवर्क के साथ एक विश्वसनीय ऑनलाइन शिक्षण कंपनी, एडुरेका द्वारा, दुनिया भर में फैली हुई है। यह कोर्स आपको डेटा का प्रबंधन करने और MySQL डेटाबेस को प्रबंधित करने के लिए मुख्य अवधारणाओं और उन्नत टूल और तकनीकों पर प्रशिक्षित करता है। इसमें MySQL वर्कबेंच, MySQL सर्वर, डेटा मॉडलिंग, MySQL कनेक्टर, डेटाबेस डिज़ाइन, MySQL कमांड लाइन, MySQL फ़ंक्शंस आदि जैसी अवधारणाओं को सीखना शामिल है। प्रशिक्षण के अंत में आप अपने स्वयं के MySQL डेटाबेस को बनाने और प्रबंधित करने में सक्षम होंगे। डेटा।

क्या आप हमसे कोई प्रश्न पूछना चाहते हैं? कृपया इसे 'पीएल / एसक्यूएल में अपवाद हैंडलिंग' लेख के टिप्पणी अनुभाग में उल्लेख करें और हम जल्द से जल्द आपके पास वापस आ जाएंगे।