Exception Handling in PL/SQL

Exception handling एक database सुरक्षा जाल की तरह काम करता है जो अप्रत्याशित runtime errors को आपके software application को freeze या crash करने से पहले पकड़ता है।

10 min read · 10 cards · 2 checks

Read in: English · हिन्दी · ગુજરાતી


Theory

जब code चुपचाप crash हो

कल्पना कीजिए आप TicketDesk के लिए एक PL/SQL औज़ार लिखते हैं ताकि एक ticket को उसके ID number से look up करें। अगर user एक ऐसा ID type करता है जो मौजूद है, सब कुछ बिल्कुल सही काम करता है। पर क्या होता है अगर वे एक ऐसा ID type करते हैं जो मौजूद नहीं? Oracle तुरंत एक runtime error फेंकता है और आपकी पूरी application को उसी जगह रोक देता है। आपका ख़ूबसूरत user interface freeze हो जाता है, और आपका database connection टूट जाता है। live execution के दौरान अप्रत्याशित data errors होने पर आप अपने software को ढहने से कैसे बचाएँ?

Theory

बिजली Circuit का Fuse

runtime errors को एक इमारत में अचानक power surges की तरह सोचिए। अगर बिजली का एक विशाल उछाल एक असुरक्षित उपकरण से टकराता है, यह तारें जला देता है और मशीन को पूरी तरह नष्ट कर देता है। इसे रोकने के लिए, engineers एक छोटा fuse लगाते हैं। जब एक surge होता है, fuse सुरक्षित रूप से connection तोड़ देता है, ख़तरे को रोक लेता है, और घर को अँधेरे में सुरक्षित रखता है। Exception handling आपके database code का बिजली fuse है, crashes को system तोड़ने से पहले पकड़ते हुए।

Theory

Exception Handling को परिभाषित करना

Oracle database dialect में, एक exception एक runtime error है जो block execution के दौरान trigger होता है। Exception handling एक विशेष procedural section है जो एक PL/SQL block के तल पर रखा जाता है ताकि इन errors को शालीनता से पकड़े और process करे। Oracle इन्हें predefined exceptions में वर्गीकृत करता है, जो built-in errors हैं जिन्हें system अपने-आप नाम देता है जैसे NO_DATA_FOUND या TOO_MANY_ROWS, और user-defined exceptions में, जो custom errors हैं जिन्हें programmers ख़ास business rules के लिए हाथ से declare करते हैं।

At a glance

Oracle PL/SQL systems में आम पूर्व-परिभाषित runtime exceptions

Oracle Exception NameOracle Error CodeTriggering Condition
NO_DATA_FOUNDORA-01403एक SELECT INTO query बिल्कुल शून्य rows return करती है
TOO_MANY_ROWSORA-01422एक SELECT INTO query एक से ज़्यादा row return करती है
ZERO_DIVIDEORA-01476एक arithmetic statement शून्य से भाग करने की कोशिश करता है
VALUE_ERRORORA-06502एक truncation, conversion, या size constraint विफलता होती है

Practical

Ticket Details सुरक्षित रूप से लाना

-- Enable terminal output display
SET SERVEROUTPUT ON;

DECLARE
  v_title tickets.title%TYPE;
BEGIN
  -- This query will fail if ID does not exist or matches multiple rows
  SELECT title INTO v_title FROM tickets WHERE id = 999;
  
  DBMS_OUTPUT.PUT_LINE('Ticket Title: ' || v_title);
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('Error: That ticket ID was not found in TicketDesk.');
    
  WHEN TOO_MANY_ROWS THEN
    DBMS_OUTPUT.PUT_LINE('Error: Multiple tickets found with that same ID.');
    
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('An unexpected error occurred in the system.');
END;
/

Copy करके Oracle FreeSQL खोलें
Oracle FreeSQL, Oracle SQL का मुफ़्त online editor है। Code पहले copy हो जाता है: उसे वहां paste करके Run करें।

Quiz

अगर एक SELECT INTO statement एक ऐसे PL/SQL block के अंदर शून्य rows return करता है जिसमें EXCEPTION section की कमी है, उस query के ठीक बाद स्थित statements का क्या होता है?

  1. वे सामान्य रूप से execute होते हैं क्योंकि Oracle गुमशुदा row को नज़रअंदाज़ करता है।
  2. वे पूरी तरह छोड़ दिए जाते हैं क्योंकि पूरा block तुरंत समाप्त हो जाता है।
  3. वे execute होते हैं पर सारे local variables NULL पर set होते हैं।
  4. वे अनिश्चित काल तक loop करते हैं जब तक database connection time out न हो जाए।
Show the answer

वे पूरी तरह छोड़ दिए जाते हैं क्योंकि पूरा block तुरंत समाप्त हो जाता है।

जब एक exception होता है और स्थानीय रूप से नहीं संभाला जाता, Oracle executable section का execution तुरंत रोक देता है और बाहर की ओर खोजता है। अगर कहीं कोई handler मौजूद नहीं, block तुरंत समाप्त होता है और crash होता है, यानी विफल query के नीचे कोई भी statements पूरी तरह छोड़ दिए जाते हैं।

Think first

OTHERS का Scope

अगर आप WHEN OTHERS handler को अपने EXCEPTION block के बिल्कुल शीर्ष पर WHEN NO_DATA_FOUND से पहले रखते हैं, Oracle compiler कैसे प्रतिक्रिया देगा? जाँचने से पहले logic मन में समझिए।

Show the answer

Oracle को WHEN OTHERS handler का EXCEPTION section में बिल्कुल अंतिम catch-all condition होना ज़रूरी है। अगर आप इसे ख़ास handlers से पहले रखते हैं, Oracle एक compilation syntax error उठाएगा क्योंकि WHEN OTHERS हर बचा error पकड़ता है, बाद के किसी भी handlers को पूरी तरह अगम्य बनाते हुए।

Watch out

अंधा Catch-All Black Hole

university laboratory practicals में भारतीय BCA students द्वारा की गई सबसे बार-बार होने वाली error WHEN OTHERS THEN NULL; इस्तेमाल करना है। जबकि यह आपके program को crash होने से रोकता है, यह error को पूरी तरह निगल जाता है इसे कहीं print या log किए बिना। अगर एक अहम calculation ख़राब data के कारण विफल होता है, आपका program दिखावा करेगा कि सब कुछ बिल्कुल सही है जबकि भ्रष्ट data output करता है। अपने exception blocks को पूरी तरह ख़ाली छोड़ने के बजाय हमेशा उनके अंदर एक error message log या display कीजिए।

Theory

Enterprise Logs और अगले Semester की Objects

live helpdesk management platforms में, exception blocks users को सुरक्षित रूप से safety की ओर route करने से पहले समर्पित system error log tables में विस्तृत crash reports लिखते हैं। आप इस बिल्कुल मानसिकता का अगले semester अपने object-oriented courses में फिर से इस्तेमाल करेंगे, जहाँ Oracle का EXCEPTION framework सीधे Java, C++, और Android crash-prevention architectures में मिलते standard try-catch blocks में बदल जाता है।

Summary

Key takeaways

  • Exceptions अप्रत्याशित runtime errors हैं जो तुरंत सामान्य execution flow बाधित करते हैं।
  • Exception handling error correction code को core application logic blocks से दूर अलग करता है।
  • NO_DATA_FOUND और TOO_MANY_ROWS जैसे predefined handlers अनुमानित SQL query विफलताएँ पकड़ते हैं।
  • WHEN OTHERS keyword अप्रत्याशित system errors के लिए एक अंतिम catch-all handler के रूप में काम करता है।
  • असंभाले exceptions ऊपर की ओर फैलते हैं और database programs को समय से पहले समाप्त कर देते हैं।
  • Memory hook: अपना block लिखो, errors के लिए जाँचो, crash पकड़ो, और records log करो!

Study this properly

This page is the lesson to read. In Gri-Learn the same topic is a graded deck: the self-checks are scored and your weak topics are tracked. Free to start.

Start this topic

Already have an account? Sign in

More from Cursors and Exception Handling, Packages, Triggers

Gri-Learn · syllabus-mapped B.C.A. lessons in English, Hindi and Gujarati

Exception Handling in PL/SQL · Mastering SQL - PL/SQL (SEC-02 option A) · Gri-Learn