批量修改oracle数据库中sdo_geometry字段的SRID

1,在user_sdo_geom_metadata表中插入或者修改需要修改表的名称,表中的geometry字段名称和srid。具体可参考该表的字段。

INSERT INTO USER_SDO_GEOM_METADATA (table_name,column_name,DimInfo,srid)
VALUES (UPPER('TB_REALTIME_FIREDISRECORD_T'), UPPER('COORDINATES'),
MDSYS.SDO_DIM_ARRAY(
MDSYS.SDO_DIM_ELEMENT('X',114.877478378889,119.644269545556,0.005),
MDSYS.SDO_DIM_ELEMENT('Y',29.395623565556,34.655112621111,0.005)
),
8307);

2,在修改字段的srid之前,需要删除该字段上得空间索引:

drop index TB_PG_TOWERINFO_STATIONMAP_SPX;

3,使用游标遍历表中的字段,修改geometry字段的srid的值:

declare
 geo sdo_geometry;
 cursor pointer is
   select T.STATIONMAP , T.TOWERID from DMSDKY.TB_PG_TOWERINFO t;
   p pointer%rowtype;
   begin
    for p in pointer loop
     geo := P.STATIONMAP;
     if geo is not null then
     if geo.sdo_srid is null then
      geo.sdo_srid := 8307;
      update  DMSDKY.TB_PG_TOWERINFO t set T.STATIONMAP = geo where T.TOWERID = P.TOWERID;
      COMMIT;
    end if;
    end if;
    end loop;
end;

4,修改完之后再重新创建字段上得索引,注意如果字段中仍含有未修改的字段值,则会出现ora-13365错误

create index TB_PG_TOWERINFO_STATIONMAP_SPX on TB_PG_TOWERINFO t (T.STATIONMAP ) indextype is mdsys.spatial_index;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值