7

क्या अपवाद उठाते समय कस्टम स्थितियां बनाना संभव है? निम्न उदाहरण पर विचार करें:PostgreSQL कस्टम अपवाद शर्तें

BEGIN  
    y := x/0; 
EXCEPTION 
    WHEN division_by_zero THEN 
     RAISE NOTICE 'caught division_by_zero'; 
     RETURN x; 
END; 

यहाँ मैं 'division_by_zero' शर्त का उपयोग अपवाद को पकड़ने के लिए।

BEGIN  
    [...] 
    RAISE custom_condition; 
EXCEPTION 
    WHEN custom_condition THEN 
     [...] 
END; 

ताकि मैं संभव मानक अपवादों के साथ हस्तक्षेप नहीं करते: मैं क्या करना चाहते हैं क्या कुछ इस तरह है। मैं बस वाई कर सकता था: = 1/0; और division_by_zero पकड़ो, लेकिन यह सही नहीं लग रहा है।

उत्तर

15
begin 
    if $1='bar' then 
     raise exception using 
      errcode='NOBAR', 
      message='Bar is prohibited', 
      hint='We do not talk to this guy'; 
    end if; 
exception 
    when sqlstate 'NOBAR' then 
     update nobar_raised set count=count+1; 
end; 

और जानकारी:

+10

धन्यवाद! यह एक सुधार के साथ काम करता है - * त्रुटि * पैरामीटर बिल्कुल पांच अंक/अपरकेस ASCII वर्ण होना चाहिए, अन्यथा यह एक त्रुटि ('अवैध SQLSTATE कोड') का कारण बन जाएगा। यहां आपके लिंक से एक नोट दिया गया है: 'नोट: SQLSTATE कोड द्वारा त्रुटि कोड निर्दिष्ट करते समय, आप पूर्वनिर्धारित त्रुटि कोड तक सीमित नहीं हैं, लेकिन पांच अंकों और/या ऊपरी-मामले ASCII अक्षरों वाले किसी भी त्रुटि कोड का चयन कर सकते हैं, अन्य 00000 से अधिक। यह अनुशंसा की जाती है कि आप तीन शून्यों में समाप्त होने वाले त्रुटि कोड फेंकने से बचें, क्योंकि ये श्रेणी कोड हैं और केवल पूरी श्रेणी को फँसाने से फंस सकते हैं। – Snifff

+0

@Sniff: धन्यवाद - मैंने त्रुटि कोड के मामले को सही किया है – Tometzky

+0

@Tometzky: upgrade.diagnostic के अंतर्गत कौन सी संपत्ति 'बार निषिद्ध है' शो के अंतर्गत है? क्या यह MESSAGE_TEXT या PG_EXCEPTION_DETAIL या PG_EXCEPTION_HINT है? (दस्तावेज़: http://goo.gl/F5w1y) – obimod

संबंधित मुद्दे