Как посчитать количество элементов во всех массивах Oracle из таблицы? - PullRequest
4 голосов
/ 23 января 2012

У меня есть такая таблица:

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

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

ТИП SDO_ORDINATE_ARRAY AS VARRAY (1048576) НОМЕРА

1007 *Я могу получить количество баллов за указанный объект:
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 голосов
/ 23 января 2012

Я думаю, что вы можете сделать это одним запросом:

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

или вы можете написать простую функцию plsql, которая возвращает атрибут подсчета VARRAY SDO_ORDINATE_ARRAY:

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

или, что еще лучше, добавьте функцию-член к типу SDO_GEOMETRY, которая возвращает атрибут count

...