鉴于此pl / pgSQL函数
drop function if exists f( float );
create function f( x float )
returns float
language plpgsql
as $$
begin
return 1 / x;
exception
when others then
raise notice 'oops';
return 0::float;
end;
$$;
很明显,select f( 0 );
会导致代码22012异常,类型为division_by_zero
。知道了这一点,我可以将exception
子句的选择器缩小到when division_by_zero then ...
。
但是,对于任意函数,如何获取错误类型?有什么比较,比方说,raise notice error.code
?
答案 0 :(得分:2)
使用sqlstate
,例如:
drop function if exists f( float );
create function f( x float )
returns float
language plpgsql
as $$
begin
return 1 / x;
exception
when others then
raise notice 'oops %', sqlstate;
return 0::float;
end;
$$;
select f(0);
NOTICE: oops 22012
f
---
0
(1 row)