У меня есть три большие таблицы с одинаковой структурой (BATHY_SHC_1, BATHY_SHC_2 and BATHY_SHC_3
), каждая со столбцом SDO_GEOMETRY
«POINT_PP», пространственный индекс каждого из них ДЕЙСТВИТЕЛЬНЫЙ. Я сделал представление этих таблиц, которое включает этот столбец геометрии (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';