OracleSpatial 处理超过1000个点的几何对象时,报错Ora-00939: 函数的参数过多解决方法

oracle空间字段mdsys.sdo_geometry存储多边形,报错ora-00939:to many arguments for function

sql语句 
update d_area set
coordinate=mdsys.sdo_geometry(2003,8307,null,mdsys.sdo_elem_info_array(1,1003,1),
mdsys.sdo_ordinate_array(
119.65415,29.14556,119.64824,....))
where id=123;
坐标少时更新没有问题,如果坐标对多了就会报错ora-00939:to many arguments for function;
用什么方式替代解决呢?

据说这是一个SQL级别的限制,当SDO_ORDINATES数组中插入一个超过1000个坐标的SDO_GEOMETRY时,可能引发该错误。
可以通过创建一个保存该几何体的PL/SQL变量(在下面的代码中被称为geom)来避免这一错误,之后将该变量绑定到update SQL语句中:

CREATE OR REPLACE PROCEDURE p_test is 
DECLARE  geom mdsys.sdo_geometry; -- PL/SQL variable to store the geometry with >999 ordinates 
BEGIN 
  -- construct the geometry here 
  geom := mdsys.sdo_geometry(2003, 
                             8307, 
                             null, 
                             mdsys.sdo_elem_info_array(1, 1003, 1), 
                             mdsys.sdo_ordinate_array(119.65415, 
                                                      29.14556, 
                                                      119.64824 
                                                      --,....写全多个坐标值 
                                                      )); 
 
  -- update the geometry in the d_area table using dynamic SQL 
  EXECUTE IMMEDIATE ‘update d_area set 
coordinate=:gm where id = 123‘ 
    USING geom; 
END;

原文地址:https://www.cnblogs.com/mol1995/p/12185930.html

时间: 2024-10-09 02:46:30

OracleSpatial 处理超过1000个点的几何对象时,报错Ora-00939: 函数的参数过多解决方法的相关文章

Oracle数据库查询用 where in 查询的项超过1000条的解决方案

众所周知,如果我们的用SQL查询语句时,如果用where in带的参数超过1000条的话,oracle是会报错的. 因为项目中遇到这样的问题,所以找到了接下来我要说的这个办法. 因为用的地方很多,所以我把这个封装成了一个方法. /// <summary> /// 获取查询条件超过1000个列表数据的SQL /// columnName In :list /// </summary> /// <param name="list">参数列表</pa

R语言与医学统计图形-【14】ggplot2几何对象之直方密度图

ggplot2绘图系统--几何对象之直方图.密度图 1.直方图 参数. geom_histogram(mapping = , data = , stat = 'bin', #统计变换,概率密度为density position = 'stack', binwidth = , #条柱宽度 bins = , #条柱数目,默认30 na.rm = FALSE, show.legend = NA, inherit.aes = TRUE ) 示例. ggplot(diamonds,aes(carat))+

查询出所有首笔订单金额超过1000的会员卡号及其首笔订单金额

题目源自:http://www.cnblogs.com/xpivot/p/4143069.html#!comments 有一张ER图描述数据结构,简单文字描述如下,劳烦看官各种脑补主外键关系: 一张会员表(account),字段有会员id(account_id), 会员卡号(account_num)... 一张交易订单表(trans),字段有会员id(account_id),交易时间(trans_time),交易金额(sales)... 要求查询出所有首笔订单金额超过1000的会员卡号及其首笔订

处理 Oracle SQL in 超过1000 的解决方案

处理oracle sql 语句in子句中(where id in (1, 2, ..., 1000, 1001)),如果子句中超过1000项就会报错.这主要是oracle考虑性能问题做的限制.如果要解决次问题,可以用 where id (1, 2, ..., 1000) or id (1001, ...) package windy.learn; import java.util.Collection; import org.apache.commons.lang3.StringUtils; p

Centos 6.4 ossec部署超过1000台agent遇到的坑

ossec批量部署中遇到了很多问题,说下其中的两个. 1.key_gen.py该脚本一次最多生成1000个keys,超过1000台agent,需多生成几次,只要ip对应正确的key即可.agent的名字最大支持32个字符,超过32个字符就会报错. 该脚本可以添加.移除.提取.导入agent /root/ossec-hids-2.8.3/contrib/ossec-batch-manager.pl Usage: /root/ossec-hids-2.8.3/contrib/ossec-batch-

oracle select in超过1000条报错解决方法

本博客介绍oracle select in超过1000条数据的解决方法,java框架是采用mybatis的,这可以说是一种比较常见的错误:select * from A where id in(...),oracle官方函数做了限定,in里的参数只能1000个,所以超过1000个参数就会报错,解决方法是将集合分为每个集合1000的小集合,然后用or拼起来select * from A where id in(1,2,...,1000) or id in (1001,1002,2000)...,好

关于Highcharts数据量超过1000时无法显示问题

今天在vue的项目中引入Highcharts,想做一个大数据量的实时刷新曲线图,发现当数据量超过1000就无法显示. 经过排查发现 Highcharts为了保证更好的性能设置了一个性能阈值检查,当数据列包含的数据超过这个值时就会报错,图表就无法显示. 所以想要解决数据量超过1000无法显示的问题,只要将性能阈值设置大一点,或者直接关闭性能阈值检查,可参考以下代码 plotOptions: { series:{ turboThreshold:0 //性能阈值检查,默认值为1000,当数据量超过这个

IN 查询时出现ORA-01795:列表中的最大表达式数为1000解决方法

问题描述: SQL进行IN查询时出现:java.sql.SQLException: ORA-01795: 列表中的最大表达式数为 1000 解决办法: 问题原因是:SQL进行IN查询时,IN中的数据量不能超过1000条. 例如:select * from student where id in ('S1','S2'...........) 如果in后面数据量过多的话就会报错. 解决方法是:用 or关键字 如:select * from student where id in('S1','S2',

MySQL连接数超过限制的解决方法

最近网站出现 User 数据库名称 has already more than 'max_user_connections' active connections 的报错,网站瘫痪.有必要研究下这个问题. max_user_connections 是 MySQL 用户连接数的最大值设置,整段语句的意思是:服务器的 MySQL 的最大连接数参数设置不足.解决方法:修改 MySQL 安装目录下 my.ini 或者 my.cnf 文件内的 max_user_connections 参数的数值,重启 M