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; |