Ich habe ein Tabellenformular, das ich brauche, um einige Informationen zu extrahieren. Diese Tabelle hat eine Oracle Spatial-Spalte (MDSYS.SDO_GEOMETRY), von der ich auch einige Daten benötige.Oracle: extrahiere Daten von MDSYS.SDO_GEOMETRY Spalte
ich mit einer einfachen Abfrage wie folgt begann:
select id, field1, field2
FROM my_table;
Danach war ich eine Schleife über das Ergebnis der Lage, die Daten zu extrahieren, die in der räumlichen Spalte war:
SELECT *
FROM TABLE (SELECT a.POSITIONMAP.sdo_ordinates
FROM my_table
WHERE ID = 18742084);
die POSITIONMAP.sdo_ordinates scheint in der Regel 4 Werte zu halten, wie diese:
100050,887
407294,948
0,577464740471056
-0,816415625470689
ich das letzte brauchen 2 Werte. Ich kann das erreichen, indem die Abfrage in diesen Wechsel:
SELECT * FROM
(SELECT rownum AS num,
column_value AS orientatie
FROM TABLE (SELECT a.POSITIONMAP.sdo_ordinates
FROM my_table
WHERE ID = 18742084))
WHERE num IN (3,4)
jede Zeile von meiner ersten Abfrage Looping über die Daten aus der POSITIONMAP Spalte ist natürlich zu extrahieren nicht sehr Leistung freundlich, so meine Frage sehr schnell langsam wird.
Ich möchte alle Informationen in einer Abfrage abrufen, aber es gibt ein paar Dinge, die mich davon abhalten.
- Nicht jede Zeile in der Tabelle hat Daten in POSITIONMAP
- Einige Zeilen tun Daten in POSITIONMAP, aber sie enthalten nur zwei Werte (also nicht die 3. und 4. Wert, die ich suche.
- ich brauche die Daten in einer Zeile für jede Zeile in der Tabelle (die vorherige Abfrage in doppelte Zeilen führen würde
der nächstgelegene ich habe ist:
select
id,
field1,
field2
t.*
FROM my_table v,
table (v.POSITIONMAP.sdo_ordinates) t
Dies gibt meine 4 Zeilen für jede Zeile in my_table. Sobald ich versuche, die rownum Bedingung in diese Abfrage zu setzen, erhalte ich einen Fehler: "Ungültige user.table.column, table.column oder spalte specification"
Gibt es eine Möglichkeit zu kombinieren, was ich will in 1 Abfrage tun?
Danke, das ist eine sehr nützliche Funktion für meinen Zweck! Einige Zeilen haben jedoch Daten in POSITIONMAP, aber sie enthalten nur 2 Werte (also nicht den dritten und vierten Wert, nach dem ich suche, daher gibt es für diese Zeilen kein t.id mit Wert 2, und ich verliere diese Zeilen jetzt. Gibt es eine Möglichkeit, irgendeine Art von lefgt Join zu machen, so dass ich diese Zeilen nicht verliere, sondern null für x und y statt – ErikL
Bearbeite meine Antwort – Rene