एक न्यूनतम उदाहरण है:
CREATE FUNCTION raise_exception RETURN INT
IS
BEGIN
RAISE NO_DATA_FOUND;
END;
/
यदि आप करते हैं:
SELECT raise_exception
FROM DUAL;
आपको एक एकल पंक्ति मिलेगी जिसमें एक NULL
. होगा मान - टॉम से पूछेंए> राज्य:
और उसके बाद पीछा किया:
तो फ़ंक्शन में अपवाद उठाया जाता है और SQL क्लाइंट इसे देखता है और इसकी व्याख्या करता है क्योंकि कोई डेटा नहीं है जो एक NULL
है मान और अपवाद को "हैंडल" करता है।
तो
DECLARE
variable_name VARCHAR2(50);
BEGIN
SELECT raise_exception
INTO variable_name
FROM DUAL
END;
/
DUAL
. के रूप में सफल होगा तालिका में एक ही पंक्ति है और फ़ंक्शन से अपवाद को (चुपचाप) संभाला जाएगा और वेरिएबल में NULL
होगा मूल्य।
हालांकि,
BEGIN
DBMS_OUTPUT.PUT_LINE( raise_exception );
END;
/
अपवाद इस बार फ़ंक्शन से पीएल/एसक्यूएल स्कोप में पारित किया जा रहा है - जो त्रुटि को संभाल नहीं करता है और अपवाद को अपवाद हैंडलर ब्लॉक (जो मौजूद नहीं है) को पास करता है, तो फिर एप्लिकेशन स्कोप तक पहुंच जाता है और निष्पादन समाप्त हो जाता है कार्यक्रम के।
और आस्क टॉम कहता है:
अब, अगर हम एक अलग अपवाद को बढ़ाने के लिए फ़ंक्शन को बदलते हैं:
CREATE OR REPLACE FUNCTION raise_exception RETURN INT
IS
BEGIN
RAISE ZERO_DIVIDE;
END;
/
फिर दोनों:
SELECT raise_exception
FROM DUAL;
और:
BEGIN
DBMS_OUTPUT.PUT_LINE( raise_exception );
END;
/
पता नहीं कैसे अपवाद को संभालना है और ORA-01476 divisor is equal to zero
।