2016-08-24 172 views
0

我与此查询查询一个Oracle Spatial数据库(我离开了其他1496个坐标):最大尺寸/ Oracle Spatial的

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个2D坐标。根据http://docs.oracle.com/cd/B28359_01/appdev.111/b28400/sdo_objrelschema.htm#SPATL489

这应该不是问题当我删除很多坐标时,没有错误。

我是否错过了SDO_GEOMETRY构造函数中坐标的最大数目?为什么我得到这个错误?

回答

1

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

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