我在代码中使用了RAISE EXCEPTION '...' USING ERRCODE='....'
,因为我可以在C#代码中使用错误代码。但是,我想在我的plpgsql代码中使用它,如下所示:
BEGIN
...
RAISE EXCEPTION 'Something is wrong' USING ERRCODE='S0001';
EXCEPTION WHEN 'S0001' THEN
-- Handle code S0001
END;
但这并不奏效。如何在plpgsql中捕获并处理我自己抛出的异常?
答案 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)