Я пытаюсь выполнить следующий запрос на 11g Oracle Database Enterprise Edition (11.1.0.6.0):Пространственный запрос ж/о пространственных данных
SELECT "__ItemId"
FROM "Cities"
WHERE "Longitude" IS NOT NULL AND "Latitude" IS NOT NULL
AND SDO_ANYINTERACT(SDO_GEOMETRY('POINT(' || "Longitude" || ' ' || "Latitude" || ')'),
SDO_UTIL.FROM_WKTGEOMETRY('POLYGON ((-100 80, 100 80, 100 -80, -100 -80, -100 80))')) = 'TRUE'
Где "Долгота" и "Широта" - числовое [НОМЕР (28,5)] столбцов в таблице «Города».
UPD: Следующий запрос (с той же ошибкой) может быть использован для испытаний:
SELECT 'Solved!'
FROM DUAL
WHERE SDO_ANYINTERACT(SDO_GEOMETRY('POINT(' || 100 || ' ' || 100 || ')'),
SDO_UTIL.FROM_WKTGEOMETRY('POLYGON ((-150.0 82.0, 150.0 82.0, 150.0 -67.0, -150.0 -67.0, -150.0 82.0))')) = 'TRUE';
Я получаю сообщение об ошибке:
Error report -
SQL Error: ORA-13226: interface not supported without a spatial index
ORA-06512: at "MDSYS.MD", line 1723
ORA-06512: at "MDSYS.MDERR", line 8
ORA-06512: at "MDSYS.SDO_3GL", line 71
ORA-06512: at "MDSYS.SDO_3GL", line 239
13226. 00000 - "interface not supported without a spatial index"
*Cause: The geometry table does not have a spatial index.
*Action: Verify that the geometry table referenced in the spatial operator
has a spatial index on it.
Вопросы:
- Как могу ли я проверить этот пункт с заданной «долготой» и «широтой» в указанном полигоне? Многоугольник не всегда прост, он может быть любым.
- Как создать пространственный индекс таблицы без какого-либо пространственного столбца?
- Действительно, я не могу просто назвать пространственный оператор?
Спасибо! Меня устраивает! –
Извините, еще один вопрос: будут ли использоваться пространственные индексы, когда они существуют? Когда «a» или «b» является пространственным столбцом в таблице с пространственным индексом в этом столбце? –
В моих тестах не используются индексы (для индекса SDO_ANYINTERACT используется), но это нормально - вопрос о таблице без пространственного индекса. Спасибо за ответ! Я буду использовать разные способы. –