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; 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM