我正在处理从远程数据库到本地数据库只插入300万行。
我试过
选项1:
insert into lic(field1,field2...field47)
select * from lic@remote;
选项2:
DECLARE
TYPE T_ARRAY_NUMBER IS TABLE OF NUMBER ;
TYPE T_ARRAY_VARCHAR2 IS TABLE OF VARCHAR2(60) ;
T_ARRAY_FUENTE T_ARRAY_VARCHAR2 ;
T_ARRAY_MODULO T_ARRAY_VARCHAR2 ;
CURSOR CUR IS
SELECT FUENTE,MODULO
FROM LICENCIAS@REMOTE
WHERE TO_CHAR(FECHA_PAGO,'yy')='12' and to_char(fecha_pago,'MM')='02' ;
BEGIN
OPEN cur ;
LOOP
FETCH CUR BULK COLLECT INTO T_ARRAY_FUENTE , T_ARRAY_MODULO
LIMIT 100;
FORALL I IN 1 .. T_ARRAY_FUENTE.COUNT
INSERT INTO BULK
VALUES (T_ARRAY_FUENTE(I) , T_ARRAY_MODULO(I));
EXIT WHEN cur%NOTFOUND ;
END LOOP ;
COMMIT ;
CLOSE CUR ;
END ;
两种选择都花费了太多时间。
任何建议都会很好。
答案 0 :(得分:0)
大多数缓慢可能是由于通过网络发送数据,但您总是可以尝试在插入中添加附加提示以查看它是否有帮助。
insert /*+ APPEND */ into lic(field1,field2...field47)
select * from lic@remote;