【问题标题】:Max size of SDO_ORDINATE_ARRAY / Oracle SpatialSDO_ORDINATE_ARRAY / Oracle Spatial 的最大大小
【发布时间】:2018-02-14 23:45:01
【问题描述】:

我正在使用此查询查询 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: 函数的参数过多 00939. 00000 - “函数的参数太多” *原因:
*操作:行错误:4 列:27

SDO_GEOMETRY 对象包含 1500 个二维坐标。根据http://docs.oracle.com/cd/B28359_01/appdev.111/b28400/sdo_objrelschema.htm#SPATL489,这应该不是问题

当我删除很多坐标时,没有错误。

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

【问题讨论】:

    标签: sql oracle oracle-spatial


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      • 1970-01-01
      • 2014-01-11
      • 2012-04-03
      • 2011-02-11
      相关资源
      最近更新 更多