2012-01-23 9 views
4

私はこのようなテーブルを持っている:表からすべてのOracle VARRAYの要素数を数える方法は?

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

SDO_GEOMETRYは、以下の型を持つフィールドのSDO_ORDINATESあり:NUMBER

のVARRAY(1048576)AS

TYPEのSDO_ORDINATE_ARRAYを私はポイントの数を取得することができます指定されたオブジェクトの場合:

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は正しい選択でしょうか?

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

答えて

6

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にメンバー関数を追加してください

+0

@dmiandre - 私はうまくいくと思われるクエリを追加しました –

+0

ありがとうございました!私はこれらの2つのクエリを比較し、pl/sql関数による2番目のアプローチははるかに高速に動作します。 – dmiandre

関連する問題