思路:通过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不是递增的原因到时慢了许多。但是比写程序方便多了。