complete guide pl sql exception handling with examples
यह ट्यूटोरियल पीएल एसक्यूएल एक्सेप्शन हैंडलिंग और संबंधित अवधारणाओं जैसे कि अपवादों के प्रकार, उपयोगकर्ता-परिभाषित और सिस्टम-परिभाषित अपवाद, एक अपवाद कैसे बढ़ाएं, आदि की व्याख्या करता है:
में PL / SQL डेटाइम प्रारूप का PL / SQL श्रृंखला , हमने डेटाइम, टाइमस्टैम्प और इंटरवल के आसपास कुछ उपयोगी कार्यों के बारे में सीखा
इस लेख में, हम PL SQL में अपवाद हैंडलिंग पर चर्चा करेंगे। इसके अलावा, हम अपवादों के फायदों का पता लगाएंगे और उन्हें कैसे बढ़ाएंगे।
सीखने के साथ चलो शुरू करो !!
आप क्या सीखेंगे:
PL SQL अपवाद हैंडलिंग
एक त्रुटि या चेतावनी की घटना को एक अपवाद कहा जाता है। यह पीएल / एसक्यूएल कार्यक्रम के रन टाइम निष्पादन के दौरान सामना किया जाता है। PL / SQL के पास कोड के EXCEPTION ब्लॉक की मदद से इन असाधारण स्थितियों को संभालने के लिए तंत्र है जहां यह परिभाषित किया गया है कि त्रुटि स्थिति का मुकाबला कैसे करें।
दो प्रकार के अपवाद हैं। वे नीचे सूचीबद्ध हैं:
- उपयोगकर्ता-परिभाषित अपवाद।
- सिस्टम परिभाषित अपवाद।
कुछ लोकप्रिय सिस्टम परिभाषित अपवाद हैं स्मृति से बाहर तथा शून्य से विभाजन, क्रमशः STORAGE_ERROR और ZERO_DIVIDE जैसे नाम। उपयोगकर्ता-परिभाषित अपवाद एक पैकेज, सबप्रोग्राम, या पीएल / एसक्यूएल ब्लॉक के घोषणा अनुभाग के भीतर घोषित किए जाते हैं और उन्हें नाम निर्दिष्ट किए जाने चाहिए।
एक बार अपवाद होने के बाद, निष्पादन का प्राकृतिक प्रवाह रुक जाता है, और फिर निष्पादन PL / SQL कोड के अपवाद अनुभाग को इंगित करता है। जबकि सिस्टम परिभाषित अपवाद डिफ़ॉल्ट रूप से फेंक दिए जाते हैं, उपयोगकर्ता-परिभाषित लोगों को RAISE कीवर्ड द्वारा स्पष्ट रूप से फेंकना पड़ता है।
इस प्रकार अपवाद हैंडलिंग उन त्रुटियों से निपटने में मदद करता है जो रन टाइम निष्पादन के दौरान होती हैं और प्रोग्राम को संकलित करते समय नहीं।
अपवाद हैंडलिंग के लाभ
फायदे नीचे सूचीबद्ध हैं:
- यदि हमारे कोड में अपवाद हैंडलिंग नहीं है, तो हर बार जब हम किसी स्टेटमेंट को निष्पादित करते हैं, तो हमें निष्पादन में त्रुटियों को सत्यापित करना चाहिए।
- यदि हम अपने कोड में अपवाद हैंडलिंग से बचते हैं, तो वास्तविक त्रुटियां छूट जाती हैं, जो कुछ अन्य त्रुटियों को जन्म देती हैं।
- अपवाद हैंडलिंग कोड में कई सत्यापन छोड़ देता है।
- यह कोड में त्रुटि संचालकों को अलग करके कोड की बेहतर पठनीयता प्रदान करता है।
अपवाद हैंडलिंग सिंटैक्स:
DECLARE <> BEGIN < > EXCEPTION <> WHEN excp1 THEN <> WHEN excp2 THEN <> ........ WHEN others THEN <> END;
डिफ़ॉल्ट अपवाद के साथ किया जाता है जब दूसरों को।
आइए एक तालिका पर विचार करें जिसका नाम है नागरिक ।
SELECT * FROM CITIZEN;
हमने नीचे दिए गए SQL स्टेटमेंट की मदद से CITIZEN टेबल बनाई है।
CREATE TABLE CITIZEN ( ID INT NOT NULL, NAME VARCHAR (15) NOT NULL, AGE INT NOT NULL, PRIMARY KEY (ID) );
इस तालिका में नीचे दिए गए SQL बयानों के साथ मान डालें:
INSERT INTO CITIZEN VALUES (1, 'ZAKS', 14); INSERT INTO CITIZEN VALUES (8, 'RANNY', 75); INSERT INTO CITIZEN VALUES (5, 'TOM', 37);
अपवाद हैंडलिंग के साथ कोडिंग कार्यान्वयन:
DECLARE citizen_id citizen.id%type; citizen_name citizen.name%type; citizen_age citizen.age%type := 9; BEGIN SELECT id, name INTO citizen_id, citizen_name FROM citizen WHERE age = citizen_age; DBMS_OUTPUT.PUT_LINE ('Citizen id is: '|| citizen_id); DBMS_OUTPUT.PUT_LINE ('Citizen name is: '|| citizen_name); EXCEPTION WHEN no_data_found THEN dbms_output.put_line ('No citizen detail found'); WHEN others THEN dbms_output.put_line ('Errors'); END; /
उपरोक्त कोड का आउटपुट:
उपरोक्त कोड में, चूंकि CITIZEN तालिका में 9 वर्ष की आयु के नागरिक नहीं हैं, इसलिए एक रनटाइम अपवाद उठाया जाता है।
PL / SQL में अपवाद उठाएँ
डेवलपर्स द्वारा RAISE की मदद से स्पष्ट रूप से एक अपवाद उठाया जा सकता है।
अपवाद बढ़ाने के लिए सिंटैक्स:
DECLARE exception_n EXCEPTION; BEGIN IF condition THEN RAISE exception_n; END IF; EXCEPTION WHEN exception_n THEN <>; END;
यहाँ अपवाद_n उस अपवाद का नाम है जिसे हम उठा रहे हैं। इस तरह, हम उपयोगकर्ता-परिभाषित और सिस्टम-परिभाषित अपवाद दोनों को बढ़ा सकते हैं।
उपयोगकर्ता-परिभाषित अपवाद
डेवलपर्स अपने स्वयं के अपवादों का निर्माण कर सकते हैं और त्रुटियों को संभालने के लिए उनका उपयोग कर सकते हैं। उन्हें एक उपप्रोग्राम के घोषणा भाग में बनाया जा सकता है और केवल उस उपप्रोग्राम के अंदर ही पहुँचा जा सकता है।
पैकेज स्तर पर बनाया गया एक अपवाद का उपयोग तब किया जा सकता है जब भी पैकेज एक्सेस किया जाता है। उपयोगकर्ता द्वारा परिभाषित अपवाद RAISE कीवर्ड का उपयोग करके उठाया जा सकता है।
उपयोगकर्ता द्वारा परिभाषित त्रुटि के लिए सिंटैक्स है:
DECLARE exception_n EXCEPTION;
यहां ही अपवाद_ एन उस अपवाद का नाम है जिसे हम उठा रहे हैं। इस प्रकार हम EXCEPTION कीवर्ड के बाद एक नाम देकर एक अपवाद की घोषणा कर सकते हैं। एक अपवाद को उसी तरह से घोषित किया जा सकता है जैसे चर घोषित किए जाते हैं। हालांकि, एक अपवाद एक अप्रत्याशित स्थिति है और डेटा आइटम नहीं है।
PL / SQL में अपवाद का दायरा:
विंडोज़ के लिए मुफ्त वीडियो कनवर्टर सॉफ्टवेयर
PL / SQL अपवाद के लिए गुंजाइश के नियम नीचे सूचीबद्ध हैं:
- कोड के एक ही ब्लॉक में एक से अधिक बार अपवाद घोषित नहीं किया जा सकता है। लेकिन हम कोड के दो अलग-अलग ब्लॉकों में एक ही अपवाद घोषित कर सकते हैं।
- कोड के एक ब्लॉक के भीतर घोषित एक अपवाद उस ब्लॉक के भीतर स्थानीय है और प्रत्येक उप-ब्लॉक के लिए वैश्विक है।
- यदि हम फिर से एक उप-ब्लॉक के अंदर एक वैश्विक अपवाद की घोषणा करते हैं, तो स्थानीय घोषणा ओवररेल हो जाती है।
आइए हम फिर से एक तालिका पर विचार करें जिसका नाम CITIZEN है।
उपयोगकर्ता परिभाषित अपवादों के साथ कोड कार्यान्वयन:
DECLARE firstexception EXCEPTION; j NUMBER; BEGIN FOR j IN (SELECT * FROM CITIZEN) LOOP IF j.ID = 8 THEN RAISE firstexception; END IF; END LOOP; EXCEPTION WHEN firstexception THEN dbms_output.put_line ('Citizen with ID 8 already exist in table.'); END; /
उपरोक्त कोड का आउटपुट:
पूर्व निर्धारित अपवाद
डेटाबेस नियमों का उल्लंघन करने या सिस्टम-निर्भर सीमा से परे जाने पर, एक आंतरिक अपवाद स्वचालित रूप से फेंक दिया जाता है। इन सभी त्रुटियों की एक अद्वितीय संख्या है और हर अपवाद को एक नाम के रूप में परिभाषित किया गया है। उदाहरण के लिए, पीएल / एसक्यूएल NO_DATA_FOUND को पूर्वनिर्धारित अपवाद फेंकता है जब कोई सेलेक्ट क्वेरी क्वेरी नहीं पंक्तियों को लाती है।
PL / SQL के सभी पूर्वनिर्धारित अपवाद STANDARD पैकेज में घोषित किए गए हैं जो PL / SQL वातावरण से संबंधित हैं।
अपवाद | Oracle त्रुटि | SQL कोड | विवरण |
---|---|---|---|
अमान्य संख्या | समय - ०१IME२२ | -1722 | यह अपवाद तब उठाया जाता है यदि किसी वर्ण स्ट्रिंग में किसी संख्या में रूपांतरण पास नहीं होता है क्योंकि स्ट्रिंग एक अमान्य संख्या का प्रतिनिधित्व कर रही है। |
ACCESS_INTO_NULL | अब - 06530 | -6530 | यह अपवाद तब उठाया जाता है जब एक अशक्त वस्तु को स्वाभाविक रूप से एक मान दिया जाता है। |
CASE_NOT_FOUND | अब - 06592 | -6592 | यह अपवाद तब उठाया जाता है जब WHEN खंड में कोई भी विकल्प नहीं चुना जाता है और कोई ELSE खंड का कोई अस्तित्व नहीं होता है। |
COLLECTION_IS_NULL | अब - 06531 | -6531 | यह अपवाद तब उठाया जाता है जब कोड नेस्टेड टेबल को छोड़कर किसी नेस्टेड टेबल या वेरिए को छोड़कर कलेक्शन के तरीकों को लागू करने की कोशिश करता है जो कि इनिशियलाइज़ नहीं है। इसे उठाया भी जा सकता है यदि हमारा कोड नेस्टेड टेबल या वैरिएबल को मान असाइन करने की कोशिश करता है जो कि इनिशियलाइज़ नहीं है। |
DUP_VAL_ON_INDEX | समय - 00001 | -1 | यह अपवाद तब उठाया जाता है जब डुप्लिकेट मानों को एक अद्वितीय सूचकांक द्वारा विवश किए गए स्तंभ में संग्रहीत करने की कोशिश की जाती है। |
CURSOR_ALREADY_OPEN | अब - 06511 | -6511 | यदि हमारा कोड पहले से खुला कर्सर खोलने की कोशिश करता है तो यह अपवाद उठाया जाता है। |
INVALID_CURSOR | TIME - 01001 | -1001 | यह अपवाद तब उठाया जाता है जब हम कर्सर पर कुछ संचालन करने की कोशिश करते हैं जो अनुमति नहीं है। उदाहरण के लिए, पहले से बंद कर्सर को बंद करने का प्रयास। |
LOGIN_DENIED | TIME - 01017 | -1017 | यह अपवाद तब उठाया जाता है जब प्रोग्राम ने अनुचित उपयोगकर्ता नाम और पासवर्ड के साथ डेटाबेस पर लॉग इन करने की कोशिश की। |
कोई डेटा नहीं मिला | TIME - 01403 | 100 | यह अपवाद तब उठाया जाता है जब कोई SELECT क्वेरी कोई पंक्तियाँ नहीं लाती है। |
NOT_LOGGED_ON | समय - 01012 | -1012 | यह अपवाद तब उठाया जाता है, जब हम इसे कनेक्ट किए बिना डेटाबेस ऑपरेशन करने का प्रयास करते हैं। |
PROGRAM_ERROR | TIME - 06501 | -6501 | यदि PL / SQL प्रोग्राम में आंतरिक त्रुटि आई है, तो यह अपवाद उठाया गया है। |
ROWTYPE_MISMATCH | TIME - 06504 | -6504 है | यदि कोई कर्सर असंगत डेटा प्रकार के साथ एक चर पर मूल्यों को वापस करने का प्रयास करता है तो यह अपवाद उठाया जाता है। |
SELF_IS_NULL | अब - 30625 | -30625 | यह अपवाद तब उठाया जाता है जब किसी सदस्य विधि को उसके ऑब्जेक्ट प्रकार को शुरू किए बिना कहा जाता है। |
STORAGE_ERROR | अब - 06500 | -6500 रु | यह अपवाद तब उठाया जाता है जब PL / SQL प्रोग्राम मेमोरी से बाहर चला जाता है या निष्पादित करते समय इसकी मेमोरी दूषित हो जाती है। |
TOO_MANY_ROWS | समय - ०१४२२ | -1422 | यदि एक चयनित क्वेरी कई पंक्तियों को लाती है तो यह अपवाद उठाया जाता है। |
SUBSCRIPT_BEYOND_COUNT | अब - 06533 | -6533 | यदि संग्रह में तत्वों की कुल संख्या से अधिक है तो यह अपवाद उठाया जाता है। |
SUBSCRIPT_OUTSIDE_LIMIT | अब - 06532 | -6532 | यदि कोई सबस्क्रिप्ट थ्रेशोल्ड श्रेणी से परे है, तो यह अपवाद उठाया गया है। |
SYS_INVALID_ROWID | ORA-01410 | -1410 | यह अपवाद तब उठाया जाता है जब किसी वर्ण पंक्ति को एक सार्वभौमिक पंक्ति आईडी में रूपांतरित नहीं किया जाता है क्योंकि वर्ण स्ट्रिंग एक अमान्य पंक्ति आईडी का प्रतिनिधित्व कर रही है। |
TIMEOUT_ON_RESOURCE | ORA-00051 | -51 | यह अपवाद तब उठाया जाता है जब Oracle संसाधन की प्रतीक्षा कर रहा हो। |
VALUE_ERROR | ORA-06502 | -6502 है | यह अपवाद उठाया जाता है यदि हमारे कार्यक्रम में गणितीय, रूपांतरण, ट्रंकेशन त्रुटि होती है। |
ZERO_DIVIDE | ORA-01476 | -1476 | यदि हम किसी संख्या को 0 से विभाजित करने का प्रयास करते हैं तो यह अपवाद उठाया जाता है। |
अक्सर पूछे जाने वाले प्रश्न और उत्तर
Q # 1) PL / SQL में पूर्वनिर्धारित अपवाद क्या है?
उत्तर: एक पूर्वनिर्धारित अपवाद पीएल / एसक्यूएल द्वारा स्वचालित रूप से फेंका जाता है यदि प्रोग्राम द्वारा डेटाबेस के नियमों का उल्लंघन होता है।
Q # 2) PL / SQL अपवाद हैंडलिंग क्या है और इसकी आवश्यकता क्यों है?
उत्तर: कार्यक्रम में एक त्रुटि या अप्रत्याशित घटना को अपवाद कहा जाता है। यह कार्यक्रम के निष्पादन के सामान्य प्रवाह को रोक देता है। PL / SQL में, अपवाद को कोड में एक अपवाद ब्लॉक के भीतर संभाला जाता है और उस ब्लॉक के अंदर अपवाद के खिलाफ उचित कार्रवाई का वर्णन किया जाता है।
Q # 3) अपवाद हैंडलिंग से क्या अभिप्राय है?
उत्तर: यह अप्रत्याशित घटनाओं का जवाब देने की विधि है जो कोड निष्पादित करते समय हो सकती है।
Q # 4) त्रुटि से निपटने के दो रूप क्या हैं?
उत्तर: त्रुटि से निपटने के दो रूपों में शामिल हैं संकलन-समय त्रुटि तथा रनटाइम त्रुटि । रन टाइम एरर अनुचित डेटा या लॉजिक के कारण प्रोग्राम के निष्पादन के दौरान होता है। हमारे कोड के संकलन के दौरान संकलन-समय की त्रुटियाँ पकड़ी जाती हैं।
Q # 5) त्रुटि और अपवाद के बीच अंतर क्या है?
उत्तर: अपवाद ऐसी घटनाएँ हैं जिन्हें कोशिश / कैच ब्लॉक की मदद से नियंत्रित किया जाता है और प्रोग्राम निष्पादन के संकलन-समय और रन-टाइम दोनों में सामना किया जा सकता है। दूसरी ओर, त्रुटियां केवल रन टाइम में सामने आती हैं।
निष्कर्ष
इस ट्यूटोरियल में, हमने PL / SQL की कुछ बुनियादी अवधारणाओं के बारे में विस्तार से चर्चा की है जो हमारे कार्यक्रमों में अपवादों को प्रबंधित करने के लिए आवश्यक हैं।
हमने नीचे सूचीबद्ध निम्नलिखित विषयों को कवर किया है:
- अपवाद।
- अपवाद के प्रकार।
- कुछ पूर्वनिर्धारित अपवाद।
अगले ट्यूटोरियल में, हम PL / SQL लेनदेन, OOPS अवधारणाओं और कई अन्य जुड़े विषयों पर चर्चा करेंगे।
अनुशंसित पाठ
- कोड उदाहरणों के साथ C # अपवाद हैंडलिंग ट्यूटोरियल
- उदाहरणों के साथ जावा अपवाद और अपवाद हैंडलिंग
- PL SQL पैकेज: Oracle PL / SQL पैकेज ट्यूटोरियल उदाहरण के साथ
- C ++ में अपवाद हैंडलिंग
- पीएल SQL ट्यूटोरियल उदाहरण के साथ शुरुआती के लिए | पीएल / एसक्यूएल क्या है
- पीएल SQL रिकॉर्ड ट्यूटोरियल उदाहरण के साथ