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