查找有错误的记录的字段名称

问题描述 投票:0回答:2

我有如下的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”中有一个可以存储字符串的字段。我想存储有错误的记录的文件名。如何找到错误原因是哪一个?

oracle exception plsql handler
2个回答
0
投票

也许在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列中看到它。


0
投票

您可以使用DML错误日志记录来捕获大多数问题:

© www.soinside.com 2019 - 2024. All rights reserved.