题
我一直在努力创建一个Oracle SQL查询,该查询会告诉我我的SDO表是否包含曲线或弧。我知道SDO_ELEM_INFO包含我需要的信息,但是我不知道如何使用SQL将ESTY和解释与SDO_ELEM_INFO分开。
到目前为止,我只有:从my_table tbl中选择tbl.shape.sdo_elem_info
解决方案
您可以使用表函数提取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)
不隶属于 StackOverflow