sql查询以确定oracle空间表是否包含曲线

时间:2010-10-19 18:58:16

标签: oracle-spatial

我一直在努力创建一个Oracle SQL查询,告诉我SDO表是否包含曲线或弧。我知道sdo_elem_info包含我需要的信息,但我不知道如何使用SQL从sdo_elem_info中分离出etype和解释。

到目前为止,我所拥有的是:从my_table tbl中选择tbl.shape.sdo_elem_info

1 个答案:

答案 0 :(得分:1)

您可以使用TABLE函数提取sdo_elem_info_array元素,然后对其进行透视并聚合生成的行,以便为每个元素生成一行,其中包含offset,etype和interpret的列。

这样的事情会给你你的疑问......(警告:未经测试)

WITH elem_info AS (
  SELECT 
    TRUNC((ROWNUM - 1) / 3, 0) element_no
  , MAX(DECODE(MOD(ROWNUM, 3), 1, t.COLUMN_VALUE, NULL)) offset
  , MAX(DECODE(MOD(ROWNUM, 3), 2, t.COLUMN_VALUE, NULL)) etype
  , MAX(DECODE(MOD(ROWNUM, 3), 0, t.COLUMN_VALUE, NULL)) interpretation
  FROM my_table tbl
  , TABLE(tbl.shape.sdo_elem_info) t
  GROUP BY TRUNC((ROWNUM - 1) / 3, 0)
)
SELECT DECODE(COUNT(*), 0, 'false', 'true')
FROM elem_info ei
WHERE ei.etype IN (1005, 2005) 
OR ei.interpretation IN (2, 4)