PostgreSQL自定义异常条件

Sni*_*fff 9 postgresql exception-handling exception custom-exceptions conditional-statements

在引发异常时是否可以创建自定义条件?请考虑以下示例:

BEGIN       
    y := x / 0;
EXCEPTION
    WHEN division_by_zero THEN
        RAISE NOTICE 'caught division_by_zero';
        RETURN x;
END;
Run Code Online (Sandbox Code Playgroud)

在这里,我使用'division_by_zero'条件来捕获异常.我想做的是这样的事情:

BEGIN       
    [...]
    RAISE custom_condition;
EXCEPTION
    WHEN custom_condition THEN
       [...]
END;
Run Code Online (Sandbox Code Playgroud)

这样我就不会干扰可能的标准异常.我可以做y:= 1/0; 并抓住division_by_zero,但它看起来并不正确.

Tom*_*zky 18

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;
Run Code Online (Sandbox Code Playgroud)

更多信息:

  • 谢谢!它适用于一个校正 - *errcode*参数应该是五位数/大写ASCII字符,否则会导致错误("无效的SQLSTATE代码").以下是您的链接中的注释:`注意:通过SQLSTATE代码指定错误代码时,您不仅限于预定义的错误代码,还可以选择由五位数和/或大写ASCII字母组成的任何错误代码,其他建议您避免抛出以三个零结尾的错误代码,因为这些是类别代码,只能通过捕获整个类别来捕获. (12认同)