【问题标题】:Oracle Spatial Index on a View of multiple tables多个表视图上的 Oracle 空间索引
【发布时间】:2019-04-26 09:19:02
【问题描述】:

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

我在表格MNE_MASK 中上传了一个多边形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';

【问题讨论】:

  • Oracle 社区论坛link 上的类似(未解决)问题。这可能是一个错误,oracle 似乎并没有纠正它,因为它不会影响很多人。

标签: oracle view spatial-index oracle-spatial


【解决方案1】:

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

【讨论】:

  • 之所以有效,是因为 MNE_MASK 表只有 1 个结果,其中 B.MNE_ID = 1,因此第二个参数是单个几何图形。 (多边形)
猜你喜欢
  • 2011-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-24
  • 2020-09-04
  • 2011-08-17
  • 2020-10-15
相关资源
最近更新 更多