码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2020-01-13 11:00:30      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:替代   ble   更新   creat   exe   错误   test   报错   语句   

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; 

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

标签:替代   ble   更新   creat   exe   错误   test   报错   语句   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!