如何计算表中所有Oracle变量的元素数量?

时间:2012-01-23 14:31:13

标签: oracle count spatial varray

我有一张这样的表:

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

SDO_GEOMETRY有一个带有以下类型的字段sdo_ordinates:

TYPE 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会是正确的选择?

1 个答案:

答案 0 :(得分:6)

我认为您可以使用一个查询来执行此操作:

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

或者你可以编写一个plsql simple函数来返回SDO_ORDINATE_ARRAY VARRAY的count属性:

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属性