2010-07-15 83 views
1

我想要形成一個查詢,使用SDO_WITHIN_DISTANCE返回給定矩形內的實體列表。我所做的查詢看起來應該可行,但Oracle給我一些奇怪的錯誤。這裏的查詢:問題與Oracle(空間幾何)查詢

SELECT * 
FROM TBLENTITYLOCATION TL 
     INNER JOIN TBLENTITY TE 
     ON TE.ENTITYID=TL.ENTITYID 
WHERE SDO_WITHIN_DISTANCE (TL.GEOLOCATION 
          , SDO_GEOMETRY (2003 
             , NULL 
             , NULL 
             , SDO_ELEM_INFO_ARRAY(1, 1003, 3) 
             , SDO_ORDINATE_ARRAY(41, -73, 36, -82) 
          ), 'DISTANCE=10 UNIT=M' 
         ) = 'TRUE' 
AND TL.LOCATIONDATETIME= (select MAX(LOCATIONDATETIME) 
          FROM TBLENTITYLOCATION 
          WHERE ENTITYID = TE.ENTITYID) 

的錯誤如下:

ORA-29902: error in executing ODCIIndexStart() routine 
ORA-13208: internal error while evaluating [window SRID does not match layer SRID] operator 
ORA-06512: at MDSYS.SDO_INDEX_METHOD_10I", line 286 

OERR說:

29902. 00000 - "error in executing ODCIIndexStart() routine" 
*Cause: The execution of ODCIIndexStart routine caused an error. 
*Action: Examine the error messages produced by the indextype code and take appropriate action. 

感謝任何幫助或想法。

+0

哪個版本的Oracle數據庫? – APC 2010-07-15 19:48:05

回答

2

ORA-13208錯誤是最重要的錯誤之一。 TL.GEOLOCATION需要SRID中的匹配值(SDO_GEOMETRY的第二個參數)

請參閱響應here是否可以幫助您。

+0

對不起,反應遲緩 - 感謝您的回覆 - 這是正確的錯誤! – Dan 2010-07-21 13:57:41

1

加里邁爾斯提供了正確的答案,讓我補充它。如果你不知道哪個SRID所使用的表格做,做一個查詢:

select SRID from USER_SDO_GEOM_METADATA where TABLE_NAME='TBLENTITYLOCATION' and COLUMN_NAME='TBLENTITYLOCATION' 

此外,來查詢它們的矩形內的對象,你不需要SDO_WITHIN_DISTANCE運營商。相反,在mask = ANYINTERACT下使用SDO_RELATE。有關更多詳細信息,請參閱http://docs.oracle.com/cd/B12037_01/appdev.101/b10826/sdo_operat.htm#i78531