Frage

Ich habe zu kämpfen eine Oracle-SQL-Abfrage zu erstellen, die mir sagen, ob meine SDO Tabelle Kurven oder Bögen enthält. Ich weiß, dass die sdo_elem_info die Informationen die ich brauche enthält, aber ich weiß nicht, wie SQL zu verwenden, um die etype und Interpretation von der sdo_elem_info zu trennen.

Bisher alles was ich habe ist: select tbl.shape.sdo_elem_info von my_table TBL

War es hilfreich?

Lösung

Sie können die Tabelle verwenden, um die Funktion sdo_elem_info_array Elemente zu extrahieren, dann schwenken, dass die resultierenden Reihen und Aggregat eine Zeile pro Element zu erhalten, mit einer Spalte für den Offset-, etype und Interpretation.

So etwas sollten Sie Ihre Abfrage geben ... (Achtung: nicht getestet)

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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top