更好的插入选项?

时间:2015-08-05 15:23:52

标签: sql plsql oracle11g insert

我正在处理从远程数据库到本地数据库只插入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 ;

两种选择都花费了太多时间。

任何建议都会很好。

1 个答案:

答案 0 :(得分:0)

大多数缓慢可能是由于通过网络发送数据,但您总是可以尝试在插入中添加附加提示以查看它是否有帮助。

insert /*+ APPEND */ into lic(field1,field2...field47)
    select * from lic@remote;