4

次のようなテーブルがあります。

CREATE TABLE spatial_data (
  id NUMBER PRIMARY KEY,
  geometry SDO_GEOMETRY);

SDO_GEOMETRY には、次のタイプのフィールド sdo_ordinates があります。

タイプ SDO_ORDINATE_ARRAY AS VARRAY(1048576) OF NUMBER

指定したオブジェクトのポイント数を取得できます:

select count(*)
from table(
    select s.geometry.sdo_ordinates
    from spatial_data s
    where s.id = 12345
);

複数のオブジェクトのカウントを取得するにはどうすればよいですか? 使えません

where s.id in (1, 2, 3, 4, 5)

そして、私はパフォーマンスを本当に気にしています。おそらくPL/SQLが正しい選択でしょうか?

4

1 に答える 1

6

私はあなたが1つのクエリでそれを行うことができると思います:

select s.id, count(*)
  from spatial_data s, table(s.geometry.sdo_ordinates)
 group by s.id

または、SDO_ORDINATE_ARRAY VARRAY のカウント属性を返す単純な plsql 関数を作成できます。

create or replace function get_count(ar in SDO_ORDINATE_ARRAY) return number is
begin
   return ar.count;
end get_count;

または、count 属性を返すメンバー関数を SDO_GEOMETRY TYPE に追加することもできます。

于 2012-01-23T16:21:01.573 に答える