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

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

关键语句oracle

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

具体语句oop

--- 黏贴到命令窗口,输入/回车 运行
 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不是递增的缘由到时慢了许多。可是比写程序方便多了。命令行

相关文章
相关标签/搜索