PostgreSQL自定义异常条件

13

我能否在抛出异常时创建自定义条件呢?考虑以下例子:

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异常,但这看起来不太对。

1个回答

33
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;

更多信息:


19
谢谢!它可以运行,但需要更正一个地方 - errcode 参数必须是五个大写ASCII字符,否则会导致错误(invalid SQLSTATE code)。这里是你链接中的说明:“注意:当通过SQLSTATE代码指定错误代码时,并不局限于预定义的错误代码,而是可以选择由五个数字和/或大写ASCII字母组成的任何错误代码,除00000之外。建议避免抛出以三个零结尾的错误代码,因为这些是类别代码,只能通过捕获整个类别来捕获。” - Snifff
@Sniff:谢谢 - 我已经更正了errcode字符的大小写。 - Tometzky
@Tometzky:在异常诊断(exception.diagnostic)下,“Bar is prohibited”显示在哪个属性下?是MESSAGE_TEXT还是PG_EXCEPTION_DETAIL还是PG_EXCEPTION_HINT?(文档:http://goo.gl/F5w1y) - obimod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接