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