gsw110 2012-08-15 09:42
浏览 592
已采纳

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;
用什么方式替代解决呢,

  • 写回答

1条回答 默认 最新

  • liuyinhuan0409 2012-08-15 10:21
    关注

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

    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化