4

我有一张这样的桌子:

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

SDO_GEOMETRY 具有以下类型的字段 sdo_ordinates:

TYPE SDO_ORDINATE_ARRAY 为 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

我认为您可以通过一个查询来做到这一点:

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 添加一个返回计数属性的成员函数

于 2012-01-23T16:21:01.573 回答