2012-01-23 71 views
4

我有一個表是這樣的:如何從表中統計所有Oracle變量中的元素數量?

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

SDO_GEOMETRY有以下類型的字段SDO_ORDINATES:

TYPE SDO_ORDINATE_ARRAY AS VARRAY(1048576)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將是正確的選擇?

回答

6

我認爲你可以使用一個查詢做到這一點:

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

,或者你可以寫一個PLSQL簡單的函數,返回SDO_ORDINATE_ARRAY VARRAY的計數屬性:

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

甚至更​​好添加一個成員函數到SDO_GEOMETRY TYPE返回計數屬性

+0

@dmiandre - 我添加了一個我認爲可能工作的查詢 –

+0

謝謝你的回答!我比較了這兩個查詢,第二種方法使用pl/sql函數的工作速度更快。 – dmiandre

相關問題