--如果要找到哪行数据,使用游标一行行处理, --然后捕获异常,写入具体哪一行数据未插入成功。 --但这比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; /
--然后捕获异常,写入具体哪一行数据未插入成功。
--但这比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;
/
查询未成功插入B表的数据 就用A,B表联合查询
或者异常捕获