0

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

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

4

1 回答 1

2

您可以使用 TABLE 函数提取 sdo_elem_info_array 元素,然后对其进行旋转并聚合结果行以产生每个元素的一行,其中包含用于偏移、etype 和解释的列。

像这样的东西应该给你你的查询......(警告:未经测试)

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)
于 2010-11-14T01:21:51.180 回答