我有一张这样的表:
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会是正确的选择?
答案 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属性