एप्लिकेशन स्तर के लिए "सर्वर के साथ क्या होता है" की सटीक व्याख्या दिखाने के लिए आप निम्नलिखित प्रयास कर सकते हैं। प्रक्रियाओं में:
create or replace procedure p1 is
...
exception
when <some_error> then
<do something>
-- re-raise error:
raise_application_error(-20001, 'Client with ID '|| ID || ' has no right to perform action "' || ACTION_NAME || '"', true);
end;
create or replace procedure p2 is
begin
p1;
exception
when <another_error> then
<do something>
-- re-raise error:
raise_application_error(-20002, 'Action "' || ACTION_NAME || '" is not completed', true);
end;
create or replace procedure p3 is
begin
p2;
exception
when <another_error> then
<do something>
-- re-raise error:
raise_application_error(-20003, 'Purchasing of "' || CAR_NAME || '" cancelled', true);
end;
और शीर्ष स्तर की प्रक्रिया में:
create or replace procedure top_level_procedure is
begin
p1;
exception
when <one_more_error> then
<do something>
raise_application_error(-20004, dbms_utility.format_error_backtrace);
end;
p1
. में अपवाद के बाद आप कुछ इस तरह देखेंगे:
ORA-20003: Purchasing of "Cool red Ferrari" cancelled
ORA-20002: Action "car purchase" is not completed
ORA-20001: Client with ID 123 has no right to perform action "Spent all money of Bill Gates"
प्रक्रिया का तीसरा पैरामीटर raise_application_error
false
के साथ मान पिछले सभी त्रुटि संदेशों को काट देता है। यदि आप प्रक्रिया p3
. में गलत मान का उपयोग करेंगे , आपको कोड के साथ केवल एक त्रुटि संदेश दिखाई देगा ORA-20003
इस उदाहरण में।
अनुलेख इसके अलावा आप अपने स्वयं के अपवादों को परिभाषित कर सकते हैं और उनका उपयोग WHEN .. THEN
में कर सकते हैं खंड। यहां आपको अधिक जानकारी और उदाहरण मिलते हैं:https:/ /docs.oracle.com/cd/B28359_01/appdev.111/b28370/errors.htm#LNPLS00704
P. P. S. कैसे लॉग इन करें। लॉग प्रक्रिया:
create or replace procedure log(p_log_message varchar2) is
pragma autonomous_transaction;
begin
insert into log_table(..., log_message) values (..., p_log_message);
commit;
end;
कॉल लॉग प्रक्रिया:
when <one_more_error> then
<do something>
log(..., dbms_utility.format_error_backtrace);
raise_application_error(-20004, dbms_utility.format_error_backtrace);