私はいくつかの情報を抽出する必要があるテーブル形式を持っています。この表にはoracle spatial(MDSYS.SDO_GEOMETRY)列があります。この列からもデータが必要です。Oracle:MDSYS.SDO_GEOMETRY列からデータを抽出
私はこのような単純なクエリで始まっ:その後
select id, field1, field2
FROM my_table;
、私は空間列にあったデータを抽出するために、結果をループすることができた:
SELECT *
FROM TABLE (SELECT a.POSITIONMAP.sdo_ordinates
FROM my_table
WHERE ID = 18742084);
POSITIONMAP.sdo_ordinatesは通常次のような4つの値を保持しているようです:
100050,887
407294,948
0,577464740471056
-0,816415625470689
私は最後が必要です2値。ので、私のクエリは非常に迅速に遅くなり、POSITIONMAP列からデータを抽出するために私の最初のクエリからすべての行を超えるループ
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)
もちろん非常にパフォーマンスフレンドリーではありません:私はこれにクエリを変更していることを達成することができます。
私はすべての情報を1つのクエリで取得したいと思いますが、私がそうしないようにするいくつかのことがあります。
- は、テーブル内のすべての行がPOSITIONMAP
- 内のデータを持っていないいくつかの行がPOSITIONMAP内のデータを持っているが、彼らは唯一の2つの値(そうではない第三、私は探しています第四値。
- が含まれています私は重複行
私が得た最も近いことになる前のクエリを使用した(表の1行ごとに1行のデータをされる必要があります。
select
id,
field1,
field2
t.*
FROM my_table v,
table (v.POSITIONMAP.sdo_ordinates) t
これは、my_tableのすべての行に対して4行を与えます。 rownum条件をこのクエリーに入れようとすると、「invalid user.table.column、table.column、or column specification」というメッセージが表示されます。
私が欲しいものを組み合わせる方法はありますか1つのクエリを行うには?
ありがとうございます、それは私の目的にとって非常に便利な機能です!しかし、POSITIONMAPにはデータがありますが、値は2つしかありません(探している第3、第4の値ではないので、値が2のt.idはありません。私はこれらの行を失うことはありませんので、xとyの代わりにnullを取得するように、何らかのlefgt結合を行う方法はありますか? – ErikL
私の答えを編集しました – Rene