2012-01-23 6 views
4

У меня есть таблица так:Как подсчитать количество элементов во всех Oracle varrays из таблицы?

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

SDO_GEOMETRY имеет поле SDO_ORDINATES с следующего типа:

ТИПА SDO_ORDINATE_ARRAY AS VARRAY (1048576) ЧИСЛА

можно получить количество точек для указанного объекта:

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, который возвращает атрибут count

+0

@dmiandre - Я добавил запрос, который, я думаю, может работать –

+0

Спасибо за ваш ответ! Я сравнил эти два запроса, а второй подход с функцией pl/sql работает намного быстрее. – dmiandre

 Смежные вопросы

  • Нет связанных вопросов^_^