У меня есть три большие таблицы с одинаковой структурой (BATHY_SHC_1, BATHY_SHC_2 and BATHY_SHC_3
), каждая с столбцом SDO_GEOMETRY
POINT_PP, пространственный индекс каждой из которых VALID.Я сделал вид на эти таблицы, который включает этот столбец геометрии (V_BATHY_SHC
).Я могу сделать пространственный запрос на представление, чтобы найти все точки в прямоугольнике, как это с правильными результатами:
SELECT PT_ID, POINT_PP from V_BATHY_SHC
WHERE SDO_RELATE(POINT_PP, MDSYS.SDO_GEOMETRY(2003, 32618, null, MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,3),MDSYS.SDO_ORDINATE_ARRAY(635267,5037808, 635277,5037818)), 'mask=anyinteract') = 'TRUE';
Я загрузил многоугольник MASK
в таблицу MNE_MASK
, добавил строку в метаданныхи создал пространственный индекс (как обычно).Имеет действительный пространственный индекс.Геометрия находится в том же SRID (32618).Затем я хочу получить все точки вида, которые находятся внутри многоугольника из таблицы MNE_MASK
.Если я сделал запрос по одной из таблиц, я получу правильные результаты:
SELECT A.PT_ID, A.POINT_PP
FROM BATHY_SHC_1 A, MNE_MASK B
WHERE B.MNE_ID = 1
AND SDO_RELATE(A.POINT_PP, B.MASK, 'mask=ANYINTERACT ') = 'TRUE';
Но если я сделал это в представлении, подобном этому:
SELECT A.PT_ID, A.POINT_PP
FROM V_BATHY_SHC A, MNE_MASK B
WHERE B.MNE_ID = 1
AND SDO_RELATE(A.POINT_PP, B.MASK, 'mask=ANYINTERACT ') = 'TRUE';
Я получил эту ошибку:
ORA-13226: интерфейс не поддерживается без пространственного индекса ORA-06512: в «MDSYS.MD», строка 1723 ORA-06512: в «MDSYS.MDERR», строка 8 ORA-06512:в "MDSYS.SDO_3GL", строка 94
В прошлом я всегда без проблем выполнял запросы по пространственному индексу представлений нескольких таблиц.
Я могу сделать пространственный запрос по обеим безпроблема, но я не могу сделать SDO_RELATE между ними ... Почему этот отличается?Большое спасибо за ваше понимание и помощь!
Редактировать: я нашел быстрый обходной путь, но он не объясняет почему.Если я поменяю два первых параметра в функции SDO_RELATE, запрос сработает.
SELECT A.PT_ID, A.POINT_PP
FROM V_BATHY_SHC A, MNE_MASK B
WHERE B.MNE_ID = 1
AND SDO_RELATE(B.MASK, A.POINT_PP, 'mask=ANYINTERACT ') = 'TRUE';