SDO_ORDINATE_ARRAY/Oracle Spatial 的最大大小

Max size of SDO_ORDINATE_ARRAY / Oracle Spatial

我正在使用此查询查询 Oracle Spatial 数据库(我遗漏了其他 1496 个坐标):

SELECT *
FROM   pointsofinterest
WHERE  Sdo_inside (pointsofinterest.geoloc,
              Sdo_geometry(2003, 4326, NULL, Sdo_elem_info_array(1, 1003, 1),
              Sdo_ordinate_array(4.237378120400001, 43.7904510498, 4.2357025146,
              43.7882575989
                                  ,
                                            4.232352256800001, 43.7882575989,
              4.232352256800001, 43.7871589661))) = 'TRUE'  

并得到这个错误:

ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function" *Cause:
*Action: Error at Line: 4 Column: 27

SDO_GEOMETRY 对象包含 1500 个二维坐标。根据 http://docs.oracle.com/cd/B28359_01/appdev.111/b28400/sdo_objrelschema.htm#SPATL489

这应该不是问题

当我去掉很多坐标的时候,没有报错。

我是否遗漏了有关 SDO_GEOMETRY 构造函数中最大坐标数的信息?为什么会出现此错误?

此错误来自 SQL 中的限制之一:可以传递给存储函数或过程的参数的最大数量,即 999 个参数(实际上是 1000 个,包括 return 值).这是因为 sdo_ordinate_array() 实际上是一个函数——sdo_ordinate_array 类型的构造函数。

正确的方法(也更有效)是将 sdo_geometry 对象作为绑定变量传递并在查询中使用它。完成的方式取决于您用来提交 select 声明的语言 ...