Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Pl/SQL नेस्टेड प्रक्रिया अपवाद हैंडलिंग

एप्लिकेशन स्तर के लिए "सर्वर के साथ क्या होता है" की सटीक व्याख्या दिखाने के लिए आप निम्नलिखित प्रयास कर सकते हैं। प्रक्रियाओं में:

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);



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. अपडेट ज्वाइन करने में त्रुटि

  2. Php के लिए linux में oci8 एक्सटेंशन इंस्टॉल करना?

  3. MyBatis और Oracle संग्रहित प्रक्रियाओं के साथ बल्क अपडेट करना

  4. पैकेज परिभाषा के अंदर Oracle उपयोगकर्ता परिभाषित प्रकार

  5. मैं Oracle SQL डेवलपर में चर का उपयोग कैसे करूं?