如果沒數據直接插入不是快很多麼
insert into t select * from schema.t;
http://www.cnblogs.com/linbaoji/archive/2009/08/04/1538140.html

解决方案 »

  1.   

    MERGE INTO TABLENAME1 p2
        USING(SELECT * FROM TABLENAME2
               WHERE IRFCNUM = NUMBERS
                 AND LOGDATE BETWEEN to_date(currdate||'000000', 'yyyy-mm-ddhh24miss')
                 AND to_date(currdate||'235959', 'yyyy-mm-ddhh24miss')) p1
           ON(p2.AKTNR = p1.AKTNR
          AND p2.AKTYP = p1.AKTYP
          AND p2.AKART = p1.AKART)
         WHEN MATCHED THEN
              UPDATE SET p2.ARTTX = p1.ARTTX,
                         p2.AKTHE = p1.AKTHE,
                         p2.KSBEK = p1.KSBEK,
                         p2.AKVST = p1.AKVST,
                         p2.VKGST = p1.VKGST,
                         p2.SPDAB = to_date(p1.SPDAB, 'yyyy-mm-dd'),
                         p2.block_note = p1.block_note,
                         p2.note1 = p1.note1,
                         p2.note2 = p1.note2
         WHEN NOT MATCHED THEN
              INSERT (p2.AKTNR, p2.AKTYP, p2.AKART, p2.ARTTX, p2.AKTHE, p2.KSBEK, p2.AKVST,
                      p2.VKGST, p2.SPDAB, p2.block_note, p2.note1, p2.note2)
              VALUES (p1.AKTNR, p1.AKTYP, p1.AKART, p1.ARTTX, p1.AKTHE, p1.KSBEK, p1.AKVST,
                      p1.VKGST, to_date(p1.SPDAB, 'yyyy-mm-dd'), p1.block_note, p1.note1, p1.note2);
      

  2.   

    merge into 是两表经过匹配播入值,速度当然要比insert into 慢,如果不需要做比较,就直接insert into!
      

  3.   

    如果插入的表是张空表的话,而且是批量插入,那么同批次数据里如果出现重复的话,是不能被有效过滤的。
    因为merge into会在批量插入结束后才会commit。