postgresql错误 - 错误:输入超出范围

Caf*_*eIV 4

以下函数会一直返回此错误消息.我认为也许double_precision字段类型是造成这种情况的原因,我试图使用CAST,但要么就是这样,要么我做得不对......帮忙?

这是错误:

ERROR:  input is out of range
CONTEXT:  PL/pgSQL function "calculate_distance" line 7 at RETURN

********** Error **********

ERROR: input is out of range
SQL state: 22003
Context: PL/pgSQL function "calculate_distance" line 7 at RETURN
Run Code Online (Sandbox Code Playgroud)

这是功能:

 CREATE OR REPLACE FUNCTION calculate_distance(character varying, 
double precision, double precision, 
double precision, double precision)

      RETURNS double precision AS
    $BODY$ 
            DECLARE earth_radius double precision; 

            BEGIN 
                    earth_radius := 3959.0; 

                    RETURN earth_radius * acos(sin($2 / 57.2958) * 
sin($4 / 57.2958) + cos($2/ 57.2958) * cos($4 / 57.2958) 
* cos(($5 / 57.2958) - ($3 / 57.2958)));
            END; 
            $BODY$
      LANGUAGE 'plpgsql' VOLATILE
      COST 100;
    ALTER FUNCTION calculate_distance(character varying, 
double precision, double precision, double precision, 
double precision) OWNER TO postgres;



    //I tried changing (unsuccessfully) that RETURN line to: 

    RETURN CAST( (earth_radius * acos(sin($2 / 57.2958) 
* sin($4 / 57.2958) + cos($2/ 57.2958) * cos($4 / 57.2958) 
* cos(($5 / 57.2958) - ($3 / 57.2958))) ) AS text);
Run Code Online (Sandbox Code Playgroud)

Let*_*ren 5

看看这个解决方案:

http://www.postgresql.org/message-id/12376732.post@talk.nabble.com

问题确实是 ACOS() 超出了 [-1,1] 范围,发生这种情况是因为它正在计算同一 LAT,LONG 对(同一位置)之间的距离

我添加了 WHERE L1.ID <> L2.ID 来停止自反计算。

马汀·范·奥斯特豪特写道:

2007 年 8 月 18 日星期六下午 03:21:02 -0700,dustov 写道:

我的数据库刚刚出现了这个新错误,我不知道为什么(因为我没有故意对此表进行任何更改)。有谁知道哪个输入超出范围 - 或者问题可能是什么?

我可以想象您的查询中唯一超出范围的是 ACOS() ,它需要介于 -1 和 1 之间(否则结果会很复杂)。

我会尝试看看 ACOS 的论据是什么,但这可能是一些舍入导致您遇到的极端情况。

希望这可以帮助,

我在计算坐标之间的距离时遇到了同样的错误,但上述提示解决了我的问题。