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

Posted

技术标签:

【中文标题】如何计算表中所有 Oracle 可变数组中的元素数?【英文标题】:How to count the number of elements in all Oracle varrays from table? 【发布时间】:2012-01-23 14:31:13 【问题描述】:

我有一张这样的桌子:

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

SDO_GEOMETRY 有一个字段 sdo_ordinates,其类型如下:

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

【问题讨论】:

【参考方案1】:

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

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

或者你可以写一个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;

或者更好的方法是为 SDO_GEOMETRY TYPE 添加一个返回计数属性的成员函数

【讨论】:

感谢您的回答!我已经比较了这两个查询,并且使用 pl/sql 函数的第二种方法工作得更快。

以上是关于如何计算表中所有 Oracle 可变数组中的元素数?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle之数组

如何计算位于 BigQuery 表中的 json 数组中的对象数?

如何将一个一维数组中的所有数都赋值为-1?不用循环。

访问可变数组列中的第二个元素

jQuery:计算表中的行数

如何计算以下 JSON 中的元素数