Search code examples
oracleoracle11goracle10goracle-spatial

ORA-13249: SDO_NN cannot be evaluated without using index


I get an error when I run the following Sql Script in ORACLE

SELECT D.ID
FROM  DOOR D
JOIN STREET S ON (S.ID=D.STREET_ID)
WHERE 
SDO_NN(D.LOCATION,SDO_UTIL.FROM_WKTGEOMETRY('POINT (11112.0111 321314.2222)'),'sdo_num_res=6') = 'TRUE'
or 
S.ID IN (17);

but when I change 'or' to 'and' or delete 'or S.ID IN (17)' I get no error.

SELECT D.ID
FROM  DOOR D
JOIN STREET S ON (S.ID=D.STREET_ID)
WHERE 
SDO_NN(D.LOCATION,SDO_UTIL.FROM_WKTGEOMETRY('POINT (11112.0111 321314.2222)'),'sdo_num_res=6') = 'TRUE'
and 
S.ID IN (17);

Type of Location field in DOOR Table is MDSYS.SDO_GEOMETRY

and

Type of ID field in STREET Table is NUMBER

I want first SQL to work. Can anyone help with the solution?


Solution

  • Would hint do any good?

    SELECT /*+ LEADING(d) USE_NL(d s) INDEX s spatial_index) */
           D.ID
      FROM DOOR D JOIN STREET S ON (S.ID = D.STREET_ID)
     WHERE     SDO_NN (
                  D.LOCATION,
                  SDO_UTIL.FROM_WKTGEOMETRY ('POINT (11112.0111 321314.2222)'),
                  'sdo_num_res=6') =
               'TRUE'
           AND S.ID IN (17);