0
我一直在努力創建一個Oracle SQL查詢,它會告訴我,如果我的SDO表包含曲線或弧。我知道sdo_elem_info包含我需要的信息,但我不知道如何使用SQL從sdo_elem_info中分離出etype和解釋。SQL查詢,以確定Oracle空間表是否包含曲線
到目前爲止,我已經是:從MY_TABLE TBL選擇tbl.shape.sdo_elem_info
我一直在努力創建一個Oracle SQL查詢,它會告訴我,如果我的SDO表包含曲線或弧。我知道sdo_elem_info包含我需要的信息,但我不知道如何使用SQL從sdo_elem_info中分離出etype和解釋。SQL查詢,以確定Oracle空間表是否包含曲線
到目前爲止,我已經是:從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)
我寫了一個Python腳本,確定是否表中包含的曲線,但它仍然看起來並不是最有效的回答這個問題的方法... – 2010-10-19 20:52:09
def containsCurves(env,schema,tbl,geom): sql =「select tbl。」 +)gems +「.sdo_elem_info from」+ tbl +「tbl」 conn = getConn(env,schema) cur = conn.cur() cur.execute(str(sql)) for cur.fetchall如果idx%3 == 0並且(val == 2或val == 4),則id = len(elemInfo): val = elemInfo [idx-1] idm = 1 : return True if idx%2 == 0 and(val == 1005 or val == 2005): return True idx + = 1 return False – 2010-10-19 21:03:38