postgres中的异常处理

时间:2012-09-25 09:07:21

标签: sql postgresql postgresql-9.1

我有一个查询在哪里,我需要找到一个数字的exp。在某些情况下,exp太大会返回溢出错误,或者在某些情况下,函数exp的参数太大。在这些情况下,我需要返回一些任意值。

示例(不起作用)

select LEAST(exp(1000), 1::double precision);

在这里,我试图找到exp(1000)。如果它太大了,我会返回1.

我怎样才能在Postgres中做到这一点?

1 个答案:

答案 0 :(得分:0)

这样的事情:

create or replace function safe_exp(val double precision)
  returns double precision
  language plpgsql
as
$body$
declare
  result double precision;
begin
  begin
    result := exp(val);
  exception 
    when others then 
      result := 1.0;
  end;
  return result;
end;
$body$

但由于异常阻止,这将比“常规”exp()呼叫慢。