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; catch하고 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 * 매개 변수는 정확히 다섯 자리/대문자 ASCII 문자 여야합니다. 그렇지 않으면 오류가 발생합니다 ('잘못된 SQLSTATE 코드'). '참고 : SQLSTATE 코드로 오류 코드를 지정할 때 미리 정의 된 오류 코드에 국한되지 않고 다섯 자리 및/또는 대문자 ASCII 문자로 구성된 오류 코드를 선택할 수 있습니다. 00000보다 큽니다. 범주 코드이므로 전체 범주를 트래핑하여 만 트랩 할 수 있기 때문에 세 개의 0으로 끝나는 오류 코드를 던지지 않는 것이 좋습니다. " – 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