2016-10-20 124 views
0

我目前正在尝试创建一个查询,该查询将计算给定经纬度值的两点之间的距离。到目前为止,我已经构建了一个查询,但遇到了几个错误,不知道我在正确的道路上!任何指导或建议,将不胜感激。我对oracle很陌生。使用欧几里德距离度量查询距离

到目前为止的代码:

DECLARE 
    lat NUMBER := -12; 
    lon NUMBER := 130; 
BEGIN 
SELECT x_id 
FROM x 
WHERE x_id = sqrt(power(lat - latitude, 2) + (lon - longitude, 2)) 
END; 
/

任何帮助将是非常感谢!

+2

请编辑您的问题,并提供样品数据和预期结果。 –

+0

错误在哪里? – Thomas

回答

0

您在匿名块中使用简单的SQL语句。您需要使用变量来接收查询返回的值。
经度计算中缺少功能函数。
也分号';'在查询结束时丢失。

SET SERVEROUTPUT ON 
DECLARE 
    lat NUMBER := -12; 
    lon NUMBER := 130; 
    lv_id NUMBER; 
BEGIN 
SELECT x_id INTO lv_id 
FROM x 
WHERE x_id = sqrt(power(lat - latitude, 2) + power(lon - longitude, 2)); 
dbms_output.put_line('ID : '||lv_id); 
EXCEPTION 
WHEN no_data_found THEN 
    dbms_output.put_line('ID Not Found'); 
WHEN too_many_rows THEN 
    dbms_output.put_line('More than one ID Not Found'); 
END; 
/
+0

我认为你需要添加异常处理'too_many_rows' – AlexSmet