जबकि मैं मानता हूं कि 99% मामलों में कम से कम उन्हें कहीं लॉग किए बिना चुपचाप अपवादों को अनदेखा करना बुरा अभ्यास है, ऐसी विशिष्ट स्थितियां हैं जहां यह पूरी तरह से स्वीकार्य है।
इन स्थितियों में, NULL आपका मित्र है:
[...]
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
अपवादों को अनदेखा करना वांछनीय हो सकता है, जहां दो विशिष्ट स्थितियां हैं:
1) आपके कोड में एक कथन है जिसे आप जानते हैं कि कभी-कभी विफल हो जाएगा और आप नहीं चाहते कि यह तथ्य आपके कार्यक्रम प्रवाह को बाधित करे। इस मामले में, आपको अपने कथन को नेस्टेड ब्लॉक में संलग्न करना चाहिए, जैसा कि निम्नलिखित उदाहरण से पता चलता है:
CREATE OR REPLACE PROCEDURE MY_PROCEDURE()
IS
l_empoyee_name EMPLOYEES.EMPLOYEE_NAME%TYPE;
BEGIN
-- Catch potential NO_DATA_FOUND exception and continue
BEGIN
SELECT EMPLOYEE_NAME
INTO l_empoyee_name
FROM EMPLOYEES
WHERE EMPLOYEE_ID = 12345;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
WHEN OTHERS THEN
RAISE;
END;
do_stuff();
EXCEPTION
WHEN OTHERS THEN
-- Propagate exception
RAISE;
END;
ध्यान दें कि पीएल/एसक्यूएल आम तौर पर विजुअल बेसिक से ज्ञात अगले प्रकार के अपवाद प्रबंधन को ऑन एरर रिज्यूमे की अनुमति नहीं देता है, जहां सभी अपवादों को नजरअंदाज कर दिया जाता है और प्रोग्राम चलता रहता है जैसे कि कुछ भी नहीं हुआ (देखें त्रुटि पर PL में अगले प्रकार की त्रुटि प्रबंधन को फिर से शुरू करें /एसक्यूएल ओरेकल ) आपको संभावित रूप से विफल होने वाले कथनों को नेस्टेड ब्लॉक में स्पष्ट रूप से संलग्न करना होगा।
2) आपकी प्रक्रिया इतनी महत्वहीन है कि इसके द्वारा फेंके गए सभी अपवादों को अनदेखा करना आपके मुख्य कार्यक्रम तर्क को प्रभावित नहीं करेगा। (हालांकि, ऐसा बहुत कम होता है और अक्सर लंबे समय में डिबगिंग दुःस्वप्न हो सकता है)
BEGIN
do_stuff();
EXCEPTION
WHEN OTHERS THEN
-- Ignore all exceptions and return control to calling block
NULL;
END;