query SQL per determinare se oracolo tabella spaziale contiene curve
-
09-10-2019 - |
Domanda
ho lottato per creare una query di Oracle SQL che mi dirà se il mio tavolo SDO contiene curve o archi. So che lo sdo_elem_info contiene la necessità informazioni che ho, ma non so come utilizzare SQL per separare l'etype e l'interpretazione dal sdo_elem_info.
Finora, tutto quello che ho è: selezionare tbl.shape.sdo_elem_info da my_table tbl
Soluzione
È possibile utilizzare la funzione TABLE per estrarre gli elementi sdo_elem_info_array, poi perno che e aggregare le righe risultanti per produrre una riga per elemento, con una colonna per offset, etype e interpretazione.
Qualcosa di simile a questo dovrebbe dare la vostra richiesta ... (attenzione: non testata)
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)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow