Oracle空间数据库,如何使用SDO_NN_DISTANCE?

Oracle spatial database, how to use SDO_NN_DISTANCE?

我有两个 tables:Lion(Lion_id(varchar2(5)), position(mdsys.sdo_geometry)) 和 Pond(Pond_id(varchar2(5)),形状(mdsys.sdo_geometry))。我在 Lion.position 和 Pond.shape.

上创建了空间索引

我想找到离狮子L2最近的3个池塘。最近的邻居必须从最近的到最远的排序。

最初,我尝试以下查询:

SELECT P.POND_ID
FROM POND P,LION L
WHERE L.LION_ID='L2' AND
MDSYS.SDO_NN(P.SHAPE,L.POSITION,'SDO_NUM_RES=3')='TRUE';

此查询运行成功。然而,当我尝试另一个时:

SELECT P.POND_ID,SDO_NN_DISTANCE(1) DIS
FROM POND P,LION L
WHERE L.LION_ID='L2' AND
MDSYS.SDO_NN(P.SHAPE,L.POSITION,'SDO_NUM_RES=3',1)='TRUE'
ORDER BY DIS;

出现错误:

ORA-13249: SDO_NN cannot be evaluated without using index
ORA-06512: in "MDSYS.MD", line 1723
ORA-06512: in "MDSYS.MDERR", line 17
ORA-06512: in "MDSYS.PRVT_IDX", line 9

我该如何解决这个问题?我是 Oracle 的新手,这是我的数据库课程的作业。

有人可以帮我吗? 谢谢!!

我找到了解决办法。 我需要添加一个提示。

SELECT /*+ LEADING(L) USE_NL(L P) INDEX(P POND_INDEX)*/
P.POND_ID, SDO_NN_DISTANCE(1) DIS
FROM POND P,LION L
WHERE L.LION_ID='L2' AND
MDSYS.SDO_NN(P.SHAPE,L.POSITION,'SDO_NUM_RES=3',1)='TRUE'
ORDER BY DIS;

然后错误解决