如何计算表中所有 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 可变数组中的元素数?的主要内容,如果未能解决你的问题,请参考以下文章