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;