提升并捕获用户定义的异常

时间:2017-02-14 13:07:09

标签: postgresql exception-handling plpgsql

我在代码中使用了RAISE EXCEPTION '...' USING ERRCODE='....',因为我可以在C#代码中使用错误代码。但是,我想在我的plpgsql代码中使用它,如下所示:

BEGIN
    ...
    RAISE EXCEPTION 'Something is wrong' USING ERRCODE='S0001';

EXCEPTION WHEN 'S0001' THEN
    -- Handle code S0001
END;

但这并不奏效。如何在plpgsql中捕获并处理我自己抛出的异常?

2 个答案:

答案 0 :(得分:4)

您的异常处理子句应如下所示:

EXCEPTION
   WHEN SQLSTATE 'S0001'
   THEN
      ...
END;

答案 1 :(得分:3)

使用sqlstate,例如:

drop function if exists test();
create or replace function test()
returns int language plpgsql as $$
begin
    raise exception using errcode = 50001;
    return 0;
    exception when sqlstate '50001' then
        return sqlstate;
end $$;

select test();

 test  
-------
 50001
(1 row)