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; split_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文字でなければなりません。そうしないと、エラー( 'invalid SQLSTATE code')が発生します。 '注意:SQLSTATEコードでエラーコードを指定するときは、あらかじめ定義されているエラーコードに限らず、5桁の英数字やその他の大文字のASCIIコードを選択することができます。 '0000より大きい。カテゴリコードであり、カテゴリー全体をトラップすることによってのみトラップすることができるので、3つのゼロで終わるエラーコードを投げるのは避けることをお勧めします。 ' – Snifff

+0

@Sniff:ありがとうございます - errcode文字 – Tometzky

+0

@Tometzky:exception.diagnosticの下のどのプロパティが 'Bar is prohibited'ですか?それはMESSAGE_TEXTかPG_EXCEPTION_DETAILかPG_EXCEPTION_HINTですか? (docs:http://goo.gl/F5w1y) – obimod