【问题标题】:Replace value in SDO_ELEM_INFO_ARRAY varray替换 SDO_ELEM_INFO_ARRAY 可变数组中的值
【发布时间】:2022-06-12 04:30:40
【问题描述】:

我在 Oracle 18c 中有一个现有的 SDO_GEOMETRY:

sdo_geometry(2003, null, null, sdo_elem_info_array(1, 1003, 1),
    sdo_ordinate_array(665287.423,4857578.086,   676832.320,4878119.585))

sdo_elem_info_array varray 中,我想将最后的 1 替换为 3:

  • 之前:(1, 1003, 1)
  • 之后:(1, 1003, 3)

如何替换 sdo_elem_info_array varray 中的值?

【问题讨论】:

    标签: oracle oracle18c oracle-spatial varray


    【解决方案1】:

    您可以创建用户定义的函数并使用 PL/SQL 对其进行编辑:

    WITH FUNCTION edit_info(i_geom SDO_GEOMETRY) RETURN SDO_GEOMETRY
    IS
      v_geom SDO_GEOMETRY := i_geom;
    BEGIN
      v_geom.SDO_ELEM_INFO(3) := 3;
      RETURN v_geom;
    END;
    SELECT edit_info(
             sdo_geometry(
               2003,
               null,
               null,
               sdo_elem_info_array(1, 1003, 1),
               sdo_ordinate_array(665287.423, 4857578.086, 676832.320, 4878119.585)
             )
           )
    FROM   DUAL;
    

    db小提琴here

    【讨论】:

      【解决方案2】:

      类似于@MTO 的解决方案,我想我也可以在查询中完成(不需要自定义函数):

      with cte as (
      select sdo_geometry(2003, 26917, null, sdo_elem_info_array(1, 1003, 1), sdo_ordinate_array(665287.423, 4857578.086, 676832.320, 4878119.585)) shape
      from   dual)
      
      select sdo_geometry(a.shape.sdo_gtype,
                          a.shape.sdo_srid,
                          a.shape.sdo_point,
                          sdo_elem_info_array(1, 1003, 3),
                          a.shape.sdo_ordinates) as shape
      from cte a;
      
      Result:
      MDSYS.SDO_GEOMETRY(2003, 26917, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 1003, 3), MDSYS.SDO_ORDINATE_ARRAY(665287.423, 4857578.086, 676832.32, 4878119.585))
      

      相关:

      【讨论】:

      • 这会用一个新数组覆盖整个 SDO_ELEM_INFO 可变数组,而不是仅仅修改数组的第三个元素(但是,仅替换第三个元素并将其他所有内容保留在 SQL @ 中要复杂得多) 987654324@).
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-26
      • 2013-09-11
      • 2021-04-06
      • 1970-01-01
      • 2014-03-09
      相关资源
      最近更新 更多