我从A表取到要用的数据存到DataTable中进行处理
然后插入到B表中如果出错了,不rollback。
成功的就直接插入,没成功的要找到没成功的行。怎么找到没成功的那行的数据啊?
我是新手,请各位多多指教啊啊我等等等等等。等答案。。

解决方案 »

  1.   

    --如果要找到哪行数据,使用游标一行行处理,
    --然后捕获异常,写入具体哪一行数据未插入成功。
    --但这比insert ...select...批量处理方式性能低。
    --例如:
    --a(col1 varchar2(10),col2varchar2(10));
    --b(col1 varchar2(10),col2varchar2(10));
    --log_table(logdate date,note varchar2(2000));CREATE OR REPLACE PROCEDURE plog IS
    BEGIN
      FOR c IN (SELECT * FROM a) LOOP
        BEGIN
          INSERT INTO b VALUES (c.col1, c.col2);
          COMMIT;
        EXCEPTION
          WHEN OTHERS THEN
            --可写日志表
            INSERT INTO log_table (SYSDATE, c.col1||','||c.col2);
            COMMIT;
        END;
      END LOOP;
    END;
    /
      

  2.   

    数据量大的话 使用bulk collect 
    查询未成功插入B表的数据 就用A,B表联合查询
    或者异常捕获