获取 oracle.sql.array 的长度

ter*_*k11 5 sql arrays oracle

在 Oracle 数据库上,我有一个包含 SDO_GEOMETRY 对象的表。我想在数据库中查询那些边小于 x 的多边形。从理论上讲,这对于像这样的查询很容易

SELECT * FROM myTable t WHERE LENGTH(t.geometry.sdo_ordinates) < x
Run Code Online (Sandbox Code Playgroud)

显然, LENGTH 函数是为 char 定义的,并且类型 t.geometry.sdo_ordinates是 oracle.sql.ARRAY 所以这不起作用。在 Oracle 中选择长度或数组不应该有一种简单的方法吗?不知何故,我无法正确使用语法。

PS:我用下面的查询解决了我的搜索,仍然是原来的问题,是不是有一个数组大小/长度函数?

SELECT * FROM myTable t WHERE LENGTH(t.geomety.Get_WKT()) < (x * c)
Run Code Online (Sandbox Code Playgroud)

mic*_*ahr 4

不,没有简单的 sql 函数可以计算数组的元素。

然而正如这里提到的,另一个想法是 PL/SQL 脚本。

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)

t.geometry.sdo_ordinates.COUNT是可以在函数/过程中使用的PL/SQL属性。因此,这不是一个可以在普通 SQL 中使用的函数

属性:

value.someAttribute
Run Code Online (Sandbox Code Playgroud)

功能:

doSomething(value)
Run Code Online (Sandbox Code Playgroud)

澄清:函数有返回值,过程没有。来源