Exception Handling in PL/SQL: Named System, Unnamed System, User-defined Exceptions

એક exception એ runtime error છે જે તમારા code ને પાટા પરથી ઉતારે છે; એને સંભાળવું એટલે એક વીજળીનું fuse box બેસાડવું જેથી એક જ short-circuit આખી application સળગાવી ન દે.

12 min read · 11 cards · 2 checks

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


Theory

તૂટેલું Exam Counter

કલ્પો કે તમે એક college counter પર students ના hall tickets process કરતા administrator છો. બધું સરળતાથી ચાલે છે જ્યાં સુધી fee નું status ખૂટતું હોય એવો એક student આવે છે. જો તમે ગભરાઈ જાઓ, થીજી જાઓ, અને આખી registration ની બારી બંધ કરી દો, તો એમની પાછળ કતારમાં ઊભેલા સેંકડો બીજા students ને સહન કરવું પડશે. Programming માં, runtime errors, જેમ કે શૂન્યથી ભાગવું, એક null value આપવી, કે કાઢી નાખેલો student record શોધવો, સંપૂર્ણપણે અનિવાર્ય છે. જો તમારા program ને ખબર ન હોય કે કેવી રીતે પ્રતિક્રિયા આપવી, એ ગભરાય છે, database session crash કરે છે, અને user ને disconnect કરી દે છે. Exception handling એ system ને કહેવાની આપણી રીત છે: 'જો કોઈ ચોક્કસ error તમને પાડે, તો આખી application crash ન કરો; મુદ્દાને એક કટોકટીના handler તરફ વાળો અને બાકીના બધા માટે સામાન્ય કામગીરી ચાલુ રાખો!'

Theory

ઘરનું Fuse Box

એક exception handler ને ભારતીય ઘરમાં બેસાડેલા વીજળીના fuse box કે એક MCB (Miniature Circuit Breaker) જેવો વિચારો. જ્યારે રસોડાના કોઈ સાધનમાં ભારે voltage નો ઉછાળો કે short circuit થાય, ત્યારે fuse સલામત રીતે ઊડી જઈને માત્ર એ બગડેલી લાઈનનો પ્રવાહ કાપી નાખે છે, તમારા મોંઘા TV અને fridge ને સળગતાં બચાવતાં. PL/SQL માં, EXCEPTION section બિલકુલ એ જ સલામતીનો fuse છે. એ ઊંચા voltage વાળી code ની નિષ્ફળતાઓ પકડે છે, એમને સાફ રીતે નિષ્ક્રિય કરે છે, અને આસપાસના મુખ્ય database server ને સ્થિર અને ચાલુ રાખે છે.

Theory

Runtime નિયંત્રણના ત્રણ બચાવ

એક exception એ execution દરમિયાન ઊભી થતી database ની ચેતવણી કે error ની સ્થિતિ છે જે સૂચનાઓના સામાન્ય પ્રવાહને ખલેલ પહોંચાડે છે. PL/SQL આ ખલેલોને, સમસ્યા કોણે શોધી અને એ system ની memory ની અંદર કેવી રીતે નિશાન થાય એના આધારે, સુઘડ રીતે ત્રણ અલગ શ્રેણીઓમાં વર્ગીકૃત કરે છે.

At a glance

PL/SQL માં અસાધારણતા સંભાળવાના સ્તરોનું સંરચનાત્મક વર્ગીકરણ

Exception ની શ્રેણીએને કોણ વ્યાખ્યાયિત કરે છે?Trigger થવાની વ્યવસ્થાઓળખવાની પદ્ધતિ
1. Named System ExceptionOracle EngineStandard database નિયમો તૂટે ત્યારે આપોઆપ ઊભી થાય છે.Oracle દ્વારા NO_DATA_FOUND કે ZERO_DIVIDE જેવા સામાન્ય વર્ણનાત્મક શબ્દો પર પહેલેથી map કરેલી.
2. Unnamed System ExceptionOracle Engineસામાન્ય, વધુ દુર્લભ system error codes માટે આપોઆપ ઊભી થાય છે.એક compiler directive થી map ન થાય ત્યાં સુધી માત્ર એક raw આંકડાકીય code (દા.ત. ORA-02292) થી ઓળખાય છે.
3. User-Defined ExceptionApplication ProgrammerCustom business logic તૂટે ત્યારે developer દ્વારા હાથે બોલાવાય છે.એક EXCEPTION variable પ્રકાર તરીકે જાહેર થાય છે અને executable code ની અંદર RAISE વાપરીને સ્પષ્ટપણે સળગાવાય છે.

Practical

The Complete College Registration and Fee Auditor

-- An anonymous block showcasing the operational differences across all three exception types
DECLARE
  -- A. Declaring a User-Defined exception for institutional rules
  e_low_attendance EXCEPTION;
  
  -- B. Naming an Unnamed System Exception for foreign key check failures (ORA-02292)
  e_child_record_found EXCEPTION;
  PRAGMA EXCEPTION_INIT(e_child_record_found, -2292);
  
  v_name       students.student_name%TYPE;
  v_attendance NUMBER := 68; -- Below university requirement
BEGIN
  -- 1. Simulating a Named System Exception trap
  -- If ID 99999 doesn't exist, this statement instantly triggers NO_DATA_FOUND
  SELECT student_name INTO v_name FROM students WHERE student_id = 99999;
  
  -- 2. Simulating a User-Defined Exception ignition
  IF v_attendance < 75 THEN
    RAISE e_low_attendance;
  END IF;
  
EXCEPTION
  -- Handling Named System Errors
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('Catch 1: That student ID was not found in the university registry.');
    
  -- Handling Custom Business Errors
  WHEN e_low_attendance THEN
    DBMS_OUTPUT.PUT_LINE('Catch 2: Admit Card Denied! Attendance is lower than the mandatory 75%.');
    
  -- Handling Unnamed System Errors mapped by hand
  WHEN e_child_record_found THEN
    DBMS_OUTPUT.PUT_LINE('Catch 3: Integrity Error! Cannot wipe course because active students are tied to it.');
    
  -- Global safety catch-all trap
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('Catch 4: An unhandled anomaly occurred. System Code: ' || SQLCODE);
END;
/

Copy કરીને Oracle FreeSQL ખોલો
Oracle FreeSQL, Oracle SQL નું મફત online editor છે. Code પહેલા copy થઈ જાય છે: તેને ત્યાં paste કરીને Run કરો.

Follow along

એક User-Defined Exception નું જીવનચક્ર

  1. 1. નકશો (DECLARE) Developer સ્થાનિક block ની અંદર એક નવું custom exception ઓળખનામ નોંધે છે, compiler ને એને એક અનન્ય error ની ઓળખ તરીકે track કરવાનું જણાવતાં.
  2. 2. નિયમની તપાસ (IF) કાર્યરત program business logic ના variables તપાસે છે જેથી custom domain ની જરૂરિયાતો તોડતી સ્થિતિઓ પારખી શકાય.
  3. 3. તણખો (RAISE) Code ને એક ઉલ્લંઘન મળે છે અને એ સ્પષ્ટપણે exception ના નામ સાથે RAISE command આપે છે, execution નો ક્રમ તરત અટકાવતાં.
  4. 4. આંતરવું (WHEN) Execution નું pointer બાકીની code લીટીઓ છોડી દે છે, તરત EXCEPTION block માં ઊતરે છે, error નું token મેળવે છે, અને સલામતીનો code પૂરો કરે છે.

Quiz

કઈ PL/SQL programmatic સૂચના પહેલેથી વ્યાખ્યાયિત ન હોય એવા Oracle server ના આંકડાકીય error code (જેમ કે ORA-02292) ને એક developer ના custom નામવાળા exception token સાથે બાંધે છે?

  1. RAISE_APPLICATION_ERROR
  2. PRAGMA EXCEPTION_INIT
  3. WHEN OTHERS THEN
  4. ALTER EXCEPTION TYPE
Show the answer

PRAGMA EXCEPTION_INIT

Compile-time directive PRAGMA EXCEPTION_INIT compiler ને સ્પષ્ટપણે સૂચના આપે છે કે એક custom નામવાળા exception variable ને એક ચોક્કસ ઋણ Oracle database error number સાથે બાંધે.

Watch out

ખતરનાક ચૂપચાપ મારનાર: WHEN OTHERS THEN NULL

Lab examinations માટે ખાસ ધ્યાન આપો! ઘણા students ને error screens ટાળવા માટે જ પોતાના blocks ના અંતે WHEN OTHERS THEN NULL; લખવાની ટેવ હોય છે. વાસ્તવિક દુનિયામાં આ અત્યંત ખતરનાક ટેવ છે. THEN NULL લખવું એક programming નું બ્લેક હોલ બનાવે છે, એ દરેક અણધારી error, data ની બગાડ, કે memory ની નિષ્ફળતાને નોંધ્યા વગર ચૂપચાપ ગળી જાય છે. User માને છે કે એમની ક્રિયા સફળ થઈ, જ્યારે disk પરનો data તૂટેલો છે, જે debugging ને સંપૂર્ણપણે અશક્ય બનાવે છે!

Think first

એકતરફી Execution ના ફાંદાની ચકાસણી

જો એક error આંતરાય અને એક મળતા exception block દ્વારા સંભાળાય, તો શું execution નું pointer મુખ્ય BEGIN section ની અંદરની બાકીની લીટીઓ પૂરી કરવા પાછું ઉપર કૂદે છે?

Show the answer

ના, એ ક્યારેય પાછું આવતું નથી! એક વાર નિયંત્રણ EXCEPTION block પર જાય, એ મુખ્ય block ના માળખામાંથી બહાર જવાની એકતરફી મુસાફરી છે. એક વાર exception સંભાળવાની સૂચનાઓ ચાલી જાય, આખો PL/SQL block સમાપ્ત થાય છે. જો તમારે એક અલગ નિષ્ફળતા છતાં બાકીની કામગીરી ચાલુ રાખવી હોય, તો તમારે એ ચોક્કસ ઊંચા જોખમવાળા statement ને એના પોતાના સમર્પિત nested BEGIN-END sub-block ની અંદર વીંટાળવું પડશે.

Theory

બહારના Viva માં ગુણ મેળવવાનું રહસ્ય

Lab exams દરમિયાન બહારના university મૂલ્યાંકનકારો સામે હો ત્યારે, એ પૂછવાનું પસંદ કરે છે: 'એક WHEN OTHERS handle ની અંદર કયાં built-in functions error ની વિગતો વાંચી શકે છે?' `SQLCODE` (જે સક્રિય ઋણ error number પાછો આપે છે) અને `SQLERRM` (જે error message નું ખરેખરું વર્ણનાત્મક લખાણ પાછું આપે છે) નામ આપીને એમને તરત પ્રભાવિત કરો.

Summary

Key takeaways

  • Exceptions એ runtime error ની અસાધારણતાઓ છે જે program ના standard રસ્તાઓને ચાલતાં અટકાવે છે.
  • Named system errors (જેમ કે NO_DATA_FOUND) આંતરિક Oracle engine દ્વારા પહેલેથી નામ પામેલી હોય છે.
  • Unnamed system errors પાસે codes હોય છે પણ નામ નહીં; એમને label કરવા PRAGMA EXCEPTION_INIT વાપરો.
  • User-defined exceptions custom application ના નિયમો લાગુ કરે છે અને એમને RAISE થી સ્પષ્ટપણે trigger કરવા જ પડે છે.
  • એક વાર error સળગે, execution નીચે exception section પર કૂદે છે અને ક્યારેય પાછું ઉપર આવતું નથી.
  • અણધારી bugs પકડવા એક સામાન્ય WHEN OTHERS catch block ની અંદર SQLCODE અને SQLERRM વાપરો.
  • Memory hook: Custom નામ જાહેર કરો, તમારા નિયમો તપાસો, તૂટે તો RAISE નો વાવટો ફરકાવો, અને WHEN statement પર એને પકડો!

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

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