dmi*_*dre 4 oracle spatial count varray
我有这样一张桌子:
CREATE TABLE spatial_data (
id NUMBER PRIMARY KEY,
geometry SDO_GEOMETRY);
Run Code Online (Sandbox Code Playgroud)
SDO_GEOMETRY有一个带有以下类型的字段sdo_ordinates:
TYPE SDO_ORDINATE_ARRAY作为NUMBER的VARRAY(1048576)
我可以得到指定对象的点数:
select count(*)
from table(
select s.geometry.sdo_ordinates
from spatial_data s
where s.id = 12345
);
Run Code Online (Sandbox Code Playgroud)
我如何计算几个物体?这是不可能的
where s.id in (1, 2, 3, 4, 5)
Run Code Online (Sandbox Code Playgroud)
我真的很在乎性能.也许PL/SQL会是正确的选择?
我认为你可以用一个查询来做到这一点:
select s.id, count(*)
from spatial_data s, table(s.geometry.sdo_ordinates)
group by s.id
Run Code Online (Sandbox Code Playgroud)
或者你可以写一个plsql简单函数,它返回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;
Run Code Online (Sandbox Code Playgroud)
甚至更好地将成员函数添加到返回count属性的SDO_GEOMETRY TYPE