我有如下的plsql:
DECLARE
CURSOR c_data IS
SELECT t2.ID, t2.NA, t2.NAME
FROM SABAPAY_TEMP.TEST2 t2;
BEGIN
FOR i IN c_data
LOOP
BEGIN
INSERT INTO SABAPAY_TEMP.TEST t (t.ID, t.NA, t.NAME)
VALUES (i.id, i.na, i.name);
EXCEPTION
WHEN OTHERS
THEN
INSERT INTO SABAPAY_TEMP.TEST5 t5 (t5.VALUE)
VALUES (i.na);
END;
END LOOP;
END;
如您所见,每条有错误且不能在表test中插入的记录都将插入'test5'表中我在“ test5”中有一个可以存储字符串的字段。我想存储有错误的记录的文件名。如何找到错误原因是哪一个?
也许在sqlerrm中存储错误消息test5
?:
declare
cursor c_data is select id, na, name from test2;
v_err varchar2(1000);
begin
for i in c_data loop
begin
insert into test (id, na, name) values (i.id, i.na, i.name);
exception when others then
v_err := sqlerrm;
insert into test5 (value, reason) values (i.na, v_err);
end;
end loop;
end;
[dbfiddle demo] >>
在我的示例中,违反了not null
上的约束name
,您可以在reason
列中看到它。
您可以使用DML错误日志记录来捕获大多数问题: