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;
然后错误解决
我有两个 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;
然后错误解决