利用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不是遞增的緣由到時慢了許多。可是比寫程序方便多了。命令行

相關文章
相關標籤/搜索