利用st_geometry将几百万条数据的普通数据库表转换成图形表

思路:通过oracle命令行执行sql,一次性通过insert语句插入1000条数据,到1W条数据后提交。

关键语句

INSERT INTO GIS.TESTPOINT(OBJECTID, SHAPE)
  SELECT OBJECTID, SDE.ST_POINT(X, Y, 9)
    FROM PT T

具体语句

--- 黏贴到命令窗口,输入/回车 运行
 set serveroutput on
    Declare
      cnt            number(10);--初始OBJECTID值
      ncnt            number(10);--每次插入的行数
      v_msg      varchar(2000);--错误信息
    begin
          cnt := 1;
          ncnt:= cnt+1000;
          loop
                begin      
   INSERT INTO GIS.TESTPOINT
     (OBJECTID,SHAPE)
     SELECT OBJECTID,
            SDE.ST_POINT(X, Y, 9)
       FROM PT T
      WHERE OBJECTID > cnt AND OBJECTID < ncnt;
                      if mod(cnt, 10000) = 0 then --1W条数据后提交
                      insert into log_info VALUES(cnt,OBJECTID,SYSDATE); --记录提交信息
                        commit;
                      end if;
                exception
                when others then
                  rollback;
                  v_msg := sqlcode||':'||sqlerrm;
                  --将异常记录做日志
                  insert into log_info VALUES(cnt,v_msg,SYSDATE); 
                  commit;
                end; 
                cnt := ncnt;
                ncnt:= cnt+1000;
                if cnt > 188481666 then -全部转换完毕
                  exit;
                end if;  
          end loop;
          commit;
          dbms_output.put_line('转换完毕');
    end;

这种转换比较耗时,六百多万的数据花了三天时间吧,也有可能是因为objectid不是递增的原因到时慢了许多。但是比写程序方便多了。

转载于:https://my.oschina.net/u/351612/blog/731848

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值