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; 

讓我不能夠標準異常干預。我可以做y:= 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

謝謝!它適用於一個校正 - * errcode *參數應該是5位數/大寫ASCII字符,否則會導致錯誤('無效的SQLSTATE代碼')。這裏是你的鏈接註釋:'注意:當通過SQLSTATE代碼指定一個錯誤代碼時,你不限於預定義的錯誤代碼,但可以選擇由五個數字和/或大寫ASCII字母組成的任何錯誤代碼,其他建議您避免拋出以三個零結尾的錯誤代碼,因爲這些是類別代碼,只能通過捕獲整個類別來捕獲錯誤代碼。# – Snifff

+0

@Sniff:謝謝 - 我已更正了errcode字符的大小寫 – Tometzky

+0

@Tometzky:exception.diagnostic下的哪個屬性顯示'Bar is禁止'顯示?是MESSAGE_TEXT還是PG_EXCEPTION_DETAIL或PG_EXCEPTION_HINT? (文檔:http://goo.gl/F5w1y) – obimod