在 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)
不,没有简单的 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)
澄清:函数有返回值,过程没有。来源