多个表视图上的Oracle Spatial索引

时间:2018-11-23 19:36:43

标签: oracle view spatial-index oracle-spatial

我有三个具有相同结构(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';

1 个答案:

答案 0 :(得分:0)

在SDO_RELATE中,第一个参数是表中的几何列,而第二个参数是单个几何。这就是说,我想知道为什么原始查询有效。在那里,您将view列作为第一个参数,就像在失败的查询中一样。