使用 Oracle Spatial DB (MDSYS.SDO_GEOMETRY) 时,Oracle 抛出“函数参数过多”

问题描述 投票:0回答:1

我尝试使用 MDSYS.SDO_GEOMETRY 插入一些多边形,但收到错误“函数参数太多”,我做了一个简单的测试,因为我怀疑插入的信息有限。

测试如下,我在底座中插入了一个很简单的多边形,比如一个矩形,第一个插入成功了,就是这里的这个小家伙:

    -47.907596018183, -15.823197195244,
    -47.910025764977, -15.822772155044,
    -47.910292291122, -15.827300809061,
    -47.908579370537, -15.827056272436,
    -47.908374813318, -15.823197247034,
    -47.910025764977, -15.822772155044,
    -47.907596018183, -15.823197195244

。 所以然后我多次插入同一个多边形,就像覆盖它一样,一遍又一遍地插入它,从而增加了插入的大小:

我到达了插入的第891行(呵呵,我疯狂地做了这个测试哈哈)我遇到了“函数参数太多”的问题,当我删除一个坐标时,留下881它插入成功,所以真的有是对插入件尺寸的限制。

有人知道我该如何解决这个问题吗?我必须插入的多边形达到第 4000 行,它很大。

sql oracle spatial-query oracle-spatial
1个回答
0
投票

您似乎遇到了可传递给函数的参数数量限制,这可能是由于 SQL 查询的大小所致。在 Oracle Spatial 中,

MDSYS.SDO_GEOMETRY
函数对可以作为参数传递的元素数量有限制。

一种可能的解决方案是使用

SDO_UTIL.FROM_WKTGEOMETRY
函数将几何图形的众所周知的文本 (WKT) 表示形式转换为
SDO_GEOMETRY
对象。 WKT 表示通常比指定单个坐标更简洁且更易于管理。

这是如何使用

SDO_UTIL.FROM_WKTGEOMETRY
的示例:

INSERT INTO your_table (geometry_column)
VALUES (SDO_UTIL.FROM_WKTGEOMETRY('POLYGON ((-47.907596018183 -15.823197195244, -47.910025764977 -15.822772155044, -47.910292291122 -15.827300809061, -47.908579370537 -15.827056272436, -47.908374813318 -15.823197247034, -47.910025764977 -15.822772155044, -47.907596018183 -15.823197195244))'));

这样,您可以使用更紧凑的 WKT 表示来表示大多边形,并且它应该可以帮助您克服参数数量的限制。

此外,如果您的多边形太复杂并且仍然超出查询大小限制,您可能需要考虑将其划分为更小、更易于管理的部分并单独插入它们。然后,您可以根据需要使用空间操作来组合或分析它们。

© www.soinside.com 2019 - 2024. All rights reserved.