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

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

A.B*_*ade 6

我认为你可以用一个查询来做到这一点:

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